%\iffalse %///////////////////////////////////////// % Generic bibliography style / % for both author-year and numerical / % for natbib, harvard, astron styles / % authordate, and apalike / % INTERNATIONAL VERSION for / % multiple languages / %///////////////////////////////////////// % This file is self-documenting: simply LaTeX it! %% (Here are the specifications of the source file) %<*selfdoc> \ifx\undefined\endoptions\def\next{% \NeedsTeXFormat{LaTeX2e}% \documentclass[a4paper,11pt,twoside]{article}% \usepackage{doc}% \raggedbottom \def\skipguard##1>{}\MakePercentIgnore\skipguard}\else\let\next\relax\fi \next % %% \ProvidesFile{babel.mbs}[1995/02/02 2.4 (PWD)] %\iffalse % For use with docstrip to select various style parameters % Default is an author-year bib style designed for my natbib.sty, % which can also handle numerical citations. %% For use with BibTeX version 0.99a or later, LaTeX version 2.09 %%------------------------------------------------------------------- %% NOTICE: %% This file may be used for non-profit purposes. %% It may not be distributed in exchange for money, %% other than distribution costs. %% %% The author provides it `as is' and does not guarantee it in any way. %% Copyright (C) 1994 Patrick W. Daly %% Max-Planck-Institut f\"ur Aeronomie %% Postfach 20 %% D-37189 Katlenburg-Lindau %% Germany %% E-mail: %% SPAN-- nsp::linmpi::daly (note nsp also known as ecd1) %% Internet-- daly@linmpi.dnet.gwdg.de %%----------------------------------------------------------- %% \CharacterTable %% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z %% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z %% Digits \0\1\2\3\4\5\6\7\8\9 %% Exclamation \! Double quote \" Hash (number) \# %% Dollar \$ Percent \% Ampersand \& %% Acute accent \' Left paren \( Right paren \) %% Asterisk \* Plus \+ Comma \, %% Minus \- Point \. Solidus \/ %% Colon \: Semicolon \; Less than \< %% Equals \= Greater than \> Question mark \? %% Commercial at \@ Left bracket \[ Backslash \\ %% Right bracket \] Circumflex \^ Underscore \_ %% Grave accent \` Left brace \{ Vertical bar \| %% Right brace \} Tilde \~} % \CodelineNumbered % \RecordChanges % ^^A Comment out next line with %^^A to print coding % \OnlyDescription % \setcounter{StandardModuleDepth}{1} % \begin{document} % \setcounter{IndexColumns}{2} % \setlength{\IndexMin}{10cm} % \changes{1.0}{1993 Aug 16}{Initial version} % \changes{2.0}{1994 Jan 31}{Add multilingual capabilities} % \changes{2.1}{1994 Jul 1}{Change documentation to \LaTeXe} % \changes{2.1a}{1994 Sep 1}{Alter wording of article title capitalization % choice} % \changes{2.2}{1994 Sep 5}{Add full author name possibilities} % \changes{2.2}{1994 Sep 5}{Fix up some punctuations} % \changes{2.2a}{1994 Sep 7}{Add possibility to put titles in quotes} % \changes{2.3}{1994 Sep 15}{Accommodate new \texttt{harvard.sty}} % \changes{2.3}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3} % \changes{2.3a}{1994 Oct 11}{Add option so year can contain any text} % \changes{2.3b}{1995 Jan 18}{Allow edited by to be in parentheses} % \changes{2.3b}{1995 Jan 18}{Allow (year) to have no punctuation following} % \changes{2.3c}{1995 Jan 20}{Journal volume numbers with more choice} % \changes{2.4}{1995 Feb 2}{Date with no punctuation preceding it} % \changes{2.4}{1995 Feb 2}{Editor names can be reversed like authors'} % \changes{2.4}{1995 Feb 2}{Can abbreviate `edited by' to `ed(s).'} % \changes{2.4}{1995 Feb 2}{Released version} % ^^A Change margins to center text % \setlength{\oddsidemargin}{0.5\paperwidth} % \addtolength{\oddsidemargin}{-0.5\textwidth} % \addtolength{\oddsidemargin}{-1in} % \setlength{\evensidemargin}{\oddsidemargin} % \pagestyle{myheadings} % \markboth{P. W. Daly}{Generic Multilingual Bibliography Style} % \title{\bfseries A Generic Bibliographic Style File\\ % with Multilingual Applications} % % \author{Patrick W. Daly} % % \GetFileInfo{babel.mbs} % \date{This paper describes file \texttt{\filename},\\ % version \fileversion{} from \filedate} % \maketitle % \MakeShortVerb{\|} % \parskip=1ex \parindent=0pt % \newcommand{\btx}{{\sc Bib}\TeX} % \newcommand{\dtx}{\textsf{docstrip}} % \section{Introduction} % This generic, or master, \btx{} style file is intended to be used with % \dtx{} in order to produce actual \texttt{.bst} files. By selecting % desired options, the output is customized to the particular requirements % needed. % The file has been assembled from Oren Patashnik's standard files {\tt % plain.bst} and \texttt{unsrt.bst}, plus his non-standard file {\tt % apalike.bst}. This last is an author-year citation style, although % somewhat imperfect. I have added a number of other options and codings to % produce the features that I deem necessary. % The file now contains the possibility of changing languages. All explicit % words have been replaced by functions whose definitions may be altered in % the resulting \texttt{.bst} file (less desirable method) or for which optional % definitions may be added in the master file as a new language option % (preferred method). Alternatively, one can select the `language' named % \texttt{babel} and then \LaTeX{} commands are inserted for the explicit % words, the definitions of which must be contained in a file called {\tt % babelbst.tex}. % To produce a customized bibliographic style (\texttt{.bst}) file from this % master file, simply \TeX{} or \LaTeX{} the `program' \texttt{makebst.tex}. % When asked for the name of the master file, answer with % \begin{quote}\tt\filename\end{quote} % and then reply to the questions in the following menus. The last question % is whether you want to generate the \texttt{.bst} file right away. % More details on this process and on the options available are to be found % in the rest of this article. % \section{About Master Bibliographic Style Files} % \subsection{The \dtx{} Options} % This master file is a \btx{} bibliographic style file containing % alternative coding depending on \dtx{} options. The options are % selected when \dtx{} is run, either interactively or through a % batch job. % Suppose that one of the options is called \texttt{xyz}. Then the following % alternatives are possible: % \begin{quote} % |% | \em one line of coding % \end{quote} % \emph{includes} the single line of coding; % \begin{quote} % |% | \em one line of coding % \end{quote} % \emph{excludes} the single line; % \begin{quote} % |%<*xyz> | \\ % \emph{several lines of coding}\\ % |% | % \end{quote} % \emph{includes} all the bracketted lines; % \begin{quote} % |%<*!xyz> | \\ % \emph{several lines of coding}\\ % |% | % \end{quote} % \emph{excludes} all the bracketted lines. % Options may be logically combined: the symbol \verb!|! is a logical {\sf % or}, |&| a logical {\sf and}, |!| a logical {\sf not}; parentheses {\tt(} % and {\tt)} may be used to group options. % \subsection{The \dtx{} Batch Job} % In order to generate a true \btx{} style file with selected options from % this master file, it is necessary to run a \dtx{} batch job. % Suppose that the master file is named \texttt{master.mbs}, and the % resulting \btx{} style file is to be \texttt{silly.bst}, and the batch job % file itself is called \texttt{silly.dbj}. To produce this with options, say, % \texttt{xyz} and \texttt{abc}, the batch job would look something like: % \begin{quote}\begin{verbatim} % \def\batchfile{silly.dbj} % \input docstrip % \preamble % This is for Journal of Silly Results % \endpreamble % \postamble % End of customized bst file % \endpostamble % \keepsilent % \generateFile{silly.bst}{f}{\from{master.mbs}{xyz,abc}} % \end{verbatim} % \end{quote} % A preamble is not necessary, although it is advisable to include some % statement about the application of the bibliographic style. A postamble % \emph{is} vital, otherwise the default will add |\endinput| at the end % of the file, something that \btx{} will not understand. The |\keepsilent| % is optional and just suppresses \dtx{} output during processing. % \subsection{The \texttt{makebst} Program} % The program \texttt{makebst} simplifies the creation of the batch job file. To % do that, it needs information on the available options. This information % must be stored in a special format, either in the master file itself, or % in a file with the same root name but extension \texttt{.opt}. The form of % this format is described in the documentation on \texttt{makebst}. % In the master file, this information must be enclosed within \dtx{} % options |%<*options>| \dots |%| and \emph{must} include an % |\endoptions| command. It may also include any number of comments. % A sample menu in the master file to select one or none of options % \texttt{xyz} \emph{or} \texttt{zyx} would look thus: % \begin{quote}\begin{verbatim} % %<*options> % \mes{Select one of these} % \optdef{f}{xyz}{Option forword}{to do forward stuff} % \optdef{r}{zyx}{Option reverse}{to do reverse stuff} % \optdef{*}{}{None of the above}{} % \getans % \endoptions % % % %<*!options> % . . . . . . % % % \end{verbatim} % \end{quote} % An explanation of these commands is to be found in the documentation on % \texttt{makebst}. % The menu information may be extracted from the master file by means of % \dtx{} and stored in a file with extension \texttt{.opt}. If this % file is missing, the program tries to read it from the master file. % (I do not actually recommend doing this; the information should come % from the true file and not from one that may have been edited) % \section{Multilingual Adaptation} % In the original \texttt{.bst} files from Oren Patashnik, there are explicit % English words that are output into the final text. Since \LaTeX{} is % increasingly being used for other languages, and since the official % version since December 1991 also uses macros in place of explicit words, % it seems appropriate for \btx{} to follow suit. % In this master bibliographic style file {\tt\filename}, all explicit % words have been replaced by functions: e.g., the word `editor' has become % the function \texttt{bbl.editor}. Depending on the language option chosen, % this function is defined to be the text {\tt"editor"}, {\tt"Redakteur"}, % or {\tt"redacteur"}, for English, German, and French, respectively. % There is another special `language' called \texttt{babel} that instead inserts % the text |"\bbleditor{}"|; the definitions of these \LaTeX{} commands % must be in a separate file named \texttt{babelbst.tex} that is read in at % the start of the bibliography. % There are thus two ways of generating a \texttt{.bst} file for a given % language: % \begin{enumerate} % \item \label{one} % Select one of the allowed \dtx{} language options (see % page~\pageref{babelopt}) or \texttt{makebst} language menu choices % (page~\pageref{babelmenu}) for a \texttt{.bst} file that is valid for that % language only. % \item \label{two} % Select the language \texttt{babel} and then edit the file % \texttt{babelbst.tex} to contain the desired translations, whereby % a number of languages might be included in it with switching % according to some criterion. % \end{enumerate} % I am uncertain as to which is the better method. With \ref{one}, the % \texttt{.bst} file is complete on its own, but a different file must be % generated for every language. This is probably necessary anyway since the % bibliography style might be language dependent. Articles in English would % have a different argument to the |\bibliographystyle| command from those % in other languages. So what? Languages cannot really be switched so % easily as an option in |\documentstyle|. The disadvantage is that the % addition of further languages is somewhat complicated and the master file % could grow to a very large size, slowing down the \dtx{} processing. % Method \ref{two} produces a single \texttt{.bst} file for all languages, the % differences appearing only in the file \texttt{babelbst.tex}. This makes it % easier to add new languages. However, unless the user is working % exclusively in one language, he will need some kind of switching method. % Most language installations provide tests for the current language, and % these would have to be built into the \texttt{babelbst.tex} file. % \subsection{Adding New Languages to the Master File} % To add a new language to this master file, changes must be made at 6 % places, all of which are marked with the text \texttt{NEWLANGUAGE:}. You % only need to search for these and follow the instructions there, also % looking at the existing languages as examples. % Let us suppose the language Newl is to be added with the \dtx{} % option name \texttt{newlang}. % \begin{enumerate} % \item % Add an entry in the description of the options. This will appear as % \begin{quote} % \verb!% \item[newlang] the equivalent Newl words;! % \end{quote} % \item % Add the option to the \texttt{makebst} language menu. This will be like % \begin{quote} % \verb!\optdef{x}{newlang}{Newl}{}! % \end{quote} % where \texttt{x} stands for some unique letter within the menu. % \item % Add a headline for the \texttt{.bst} file that states right at the start % for which language it is intended. % \begin{quote} % \verb!% % NEWL! % \end{quote} % \item % Now for the hard part. Add all the translations for \texttt{bbl.and} etc. % Follow the models shown. The addition should be something like % \begin{quote}\small % \verb!% The Newl translations !\\ % \verb!% \begin{macrocode}!\\ % \verb!%<*newlang>!\\ % \verb! % The language selected is NEWL!\\ % \verb!FUNCTION {bbl.and}!\\ % \verb!{ "ee"}!\\ % \verb!. . . . . . . . . . . . . .!\\ % \verb!FUNCTION {bbl.fifth}!\\ % \verb=%{ "Frotty" }=\\ % \verb!%{ "5-y" }!\\ % \verb! !\\ % \verb!FUNCTION {bbl.th}!\\ % \verb!{ "-y" }!\\ % \verb! !\\ % \verb!%!\\ % \verb!% \end{macrocode}! % \end{quote} % \item % A similar addition is made for the names of the months. % \item % There could be some problems with edition numbers due to language % dependent ways of treating ordinal numbers (1st, 2nd, 3rd in English; % 1$^{\mbox{\scriptsize re}}$, 2$^{\mbox{\scriptsize e}}$, % 3$^{\mbox{\scriptsize e}}$ in French; 1., 2., 3., in German). Some % accommodation already exists for the oddball language English, and % further hacking may be needed for others. % \item % Finally, if there should be any need for a double-quote character in % the translations (German needs it for umlauts) then there is trouble % because the \btx{} strings do not allow it. Instead, use the command % |\qq|, as in the German word |F\qq{u}nfte| for {\sl F\"unfte} (fifth). % This command must then be defined for the source text, by adding its % definition to the start of the \texttt{.bbl} file. The function % \texttt{begin.bib} already includes this for the \texttt{german} option, % which may be added in the same manner for other languages. % \end{enumerate} % \subsection{Changing \texttt{babelbst.tex} for New Languagues} % If the above is too complex, then a new language can be added by % modifying the file \texttt{babelbst.tex} and selecting the language {\tt % babel} for the \texttt{.bst} file. If this is the only language to be used, % then just change the English words in the definitions. % However, some form of switching would be more desirable. With \TeX\ % version 3, there is a |\language| parameter to control the hyphenation % patterns, and this could be used to select the correct language. For % example, if language 0 is English and language 1 Newl, then put the % English version of \texttt{babelbst.tex} into \texttt{englbst.tex} and the % Newl % version in \texttt{newlbst.tex}. Then \texttt{babelbst.tex} could contain: % \begin{quote}\begin{verbatim} % \ifcase\language \input{englbst} \or \input{newlbst} % \else \input{newlbst} \fi % \end{verbatim} % \end{quote} % This is of course installation dependent. % \subsection{A Compromise Method of Adding a Language} % A third method is a mix between the above two and requires some hacking % on the part of the user. % \begin{enumerate} % \item % Make up a file like \texttt{babelbst.tex} for the new language, say % \texttt{newlbst.tex}. % \item % Generate a \texttt{.bst} file with the \texttt{babel} language option. % \item % Go to the line near the end of the \texttt{.bst} file and replace % \begin{quote}\verb!\input{babelbst.tex}! with % \verb!\input{newlbst.tex}! % \end{quote} % \end{enumerate} % The resulting \texttt{.bst} file is valid for one language only (as for % method \ref{one}), and its name should reflect this. % \subsection{Extracting Sample \texttt{babelbst.tex} Files} % Language dependent definition files suitable to be used as % \texttt{babelbst.tex}, or to be read in by it, % are contained in this master file % for English, German, and French. Extract them with \dtx{} and the % options \texttt{bblbst,english}, \texttt{bblbst,german}, and % \texttt{bblbst,french}. % \subsection{Problem with Edition Numbers} % Something to note here is the ordinal numbers for editions. \btx{} % demands that the field \texttt{edition} be given in the database as a word % `First', `Second', etc., or as `1st', `2nd', etc. This is bad policy % because it is language dependent. So what I do is to test for the words % `first' through `fifth' (case independently) and replace them with % language-dependent equivalents. If the {\tt} option is selected, % these equivalents are ordinal numbers for that language. Any other words % cannot be interpreted and must be printed as is. % However, if the \texttt{edition} is given as a number, with or without % following letters, then the numbers 1 through 5 are replaced by their % words; any higher numbers just have the ordinal ending (`th' in English) % added to them. % These numbers are only used with the word % `edition' or its equivalent in other languages, so the translators need % to provide only the one gender, e.g., feminine for both German and % French. % \section{The Options} % Here I present a list of all the \dtx{} options that are % available in this file {\tt\filename}. % The normal user can skip this section since he will probably make use % of the menus via \texttt{makebst}. These are described in % Section~\ref{sec:menu}. The menus provide much more informative prompts % than the heavily abbreviated option names listed here. In other words, % the options described in this section are meant for internal (programmer) % usage, while the normal interface for the user is the menus. % I have tried to avoid % conflicts with mutually exclusive options by always letting one dominate. % For example, if \texttt{a} and \texttt{b} are to be mutually exclusive, then % the three possibilities are: % \begin{quote}\begin{tabular}{rl} % neither & \tt\% \\ % \texttt{a} only & \tt\% \\ % \texttt{b} only & \tt\% % \end{tabular}\end{quote} % so that if both \texttt{a} and \texttt{b} have been selected, the result is as % if only \texttt{a} had been given. (If one uses \texttt{makebst} to produce the % \dtx{} batch job, then it is impossible to give mutually % exclusive options.) % Most mutually exclusive options have the same prefix before the hyphen. % \newenvironment{opt}{% % \begin{list}{}{\labelwidth2cm \leftmargin2.5cm \labelsep1em \rightmargin0pt % \def\makelabel##1{\ttfamily##1 \hfill}}}{\end{list}} % \textbf{Citation style:} whether or not a numerical or author-year system % is to be used. % \begin{opt} % \item[--] default is numerical, standard \LaTeX, as for {\tt % plain.bst}.\\ % |\bibitem{key}...| % \item[cite] special for listing entire databases; the cite key is used % as the label so it may be listed.\\ % |\bibitem[key]{key}...| % \item[ay] for author-year style of citations. Various forms of |\bibitem| % are provided under this option, to support different types % of \LaTeX{} styles for interfacing with the author-year system. % \end{opt} % If \texttt{ay} has been selected, then the type of author-year interface % is selectable. Some of these, like \texttt{natbib} and \texttt{harvard} % exist in two versions because of updates in these systems. % \begin{opt} % \item[--] default is the system I invented for my \texttt{natbib.sty}.\\ % |\bibitem[author(year)]{key}...| % \item[nat] for extended format of \texttt{natbib.sty} version 5.3\\ % |\bibitem[author(year)full author]{key}...| % \item[alk] for the \texttt{apalike.sty} of Oren Patashnik and related % systems\\ % |\bibitem[author, year]{key}...| % \item[har] for the Harvard family of styles (with \texttt{harvard.sty}).\\ % |\harvarditem[short]{long}{year}{key}...| % \item[harnm] for the extended Harvard family, containing some extra commands % used by \LaTeXe\ version 2.0.3 of \texttt{harvard.sty} % \item[ast] for astronomy family of styles (with \texttt{astron.sty}).\\ % |\bibitem[\protect\astroncite{author}{year}]{key}...| % \item[cay] for the Chicago family of styles (with \texttt{chicago.sty}).\\ % |\bibitem[\protect\citeauthoryear{long}{short}{year}]{key}...| % \item[cn] for the ``author-date'' group of styles (with {\tt % authordate1-4.sty})\\ % |\bibitem[\protect\citename{author, }year]{key}...| % \end{opt} % \textbf{Sequence:} the order in which the references are listed. % \begin{opt} % \item[--] default is alphabetical by all authors, date, title % \item[seq-no] (numerical only) sequence by citation order % \item[seq-lab] (author-year) by label, date, title (means that Daly % precedes Daly and Williams, precedes Daly et al.) % \end{opt} % \textbf{Language selection:} the translations of certain explicit words. % \label{babelopt} %^^A NEWLANGUAGE: add an \item here, say \item[newlang] % \begin{opt} % \item[english] English, for `and', `chapter', `editor', etc'; % \item[german] the equivalent German words; % \item[french] the equivalent French words; % \item[espo] the equivalent Esperanto words; % \item[babel] replace words with \LaTeX{} commands that are defined % in the file \texttt{babelbst.tex}; % \item[{\em??}] whatever other languages have been added. % \end{opt} % \begin{quote}\sl Warning: \textbf{There is no default language!} One of the % above options must be given. % \end{quote} % \textbf{Names formatting:} how initials and surnames are to be combined. % \begin{opt} % \item[--] default is full names, given names first % \item[nm-init] initials plus surname % \item[nm-rev] surname plus initials % \item[nm-rev1] surname plus initials (1st name only) then initials % plus surname % \item[nm-rv] as \texttt{nm-rev}, but initials without dots % \item[ed-rev] editors' names are reversed the same as authors' % \end{opt} % \textbf{Number of names:} normally all names listed (in reference list) % \begin{opt} % \item[nmlm] limit number of names % \item[x1...x9] (with \texttt{nmlm}) maximum number of names to appear % \item[m1...m5] (with \texttt{nmlm}) minimum number before `et al' written; % no check for consistency is taken; one \texttt{x} and % one \texttt{m} number must be given, and {\tt x}$\le${\tt m} % \end{opt} % \textbf{Names font:} in the reference list % \begin{opt} % \item[--] default is names in normal type face % \item[nmft-sc] names in small caps % \item[nmft-it] names in italics % \item[nmft-bf] names in bold % \end{opt} % \textbf{Block punctuation:} between logical sections (not mutually % exclusive) % \begin{opt} % \item[--] default is period after each logical section, including end % \item[blk-com] use commas, except at very end (changes `In' to `in') % \item[blk-tit] use commas, except after a title and very end % \item[in-blk] when commas used between blocks, starts sentence after % article title when followed by ``In: \dots'' % \item[in-col] puts a colon after `In' or `in' for edited works % \item[fin-bare] no punctuation at the very end % \end{opt} % \textbf{Date:} position and enclosure % \begin{opt} % \item[--] default is date at end, before notes; for author-year, % date consists only of year, no month % \item[dt-beg] date goes after authors' names % \item[dt-end] date goes after any notes % \item[yr-par] no month, year in parentheses () % \item[yr-brk] no month, year in brackets [] % \item[yr-col] no month, year preceded by colon and space % \item[yr-per] year preceded by period and space % \item[yr-blk] year preceded by space % \item[note-yr] permits text (like ``in press'') in the \texttt{year} field % \end{opt} % \textbf{Article in journal:} style of title, volume, pages % \begin{opt} % \item[--] default is: Title. \textit{Journal}, vol(num):p1--p2 % \item[volp-sp] as above, but with a space, vol(num):~p1--p2 % \item[vol-bf] volume in bold % \item[vol-it] volume in italics % \item[vol-2bf] volume and number bold % \item[volp-com] comma and space instead of colon: vol(num), p1--p2 % \item[vnum-x] no number for journals, only volume % \item[vnum-s] replace vol(num) with vol, num % \item[vnum-nr] replace vol(num) with vol, no. num % \item[vnum-h] replace vol(num) with vol, \#num % \item[jpg-1] only starting page given % \item[jnm-x] no punctuation after journal name % \item[tit-it] article title in italics % \item[tit-q] article title in single quotes % \item[tit-qq] article title in double quotes % \item[jtit-x] no article title (applies only to journals and % collections) % \item[atit-u] article title capitalized as in entry, default is % sentence capitalization (first word and words following % colons) % \end{opt} % \textbf{Thesis title:} formatted like a book or article % \begin{opt} % \item[--] default is like a book title % \item[thtit-a] titles of PhD and Master theses formatted like articles % \end{opt} % \textbf{Book title:} font style % \begin{opt} % \item[--] default is italicized % \item[btit-rm] book title plain % \end{opt} % \textbf{Abbreviations:} of various words, default is no abbreviations % \begin{opt} % \item[pp] abbreviate `page(s)' as `p.' and `pp.' % \item[ed] abbreviate `editor(s)' as `ed.' and `eds.' % \item[abr] abbreviate `volume', `edition', `technical report', etc. % \item[ord] write edition numbers as 1st, 2nd, instead as words. % \end{opt} % \textbf{Editor:} alternative for \emph{in edited} work % \begin{opt} % \item[--] in \emph{names}, editors, \emph{title} % \item[edby] in \emph{title}, edited by \emph{names} % \item[edby-par] in \emph{title} (Edited by \emph{names}) % \end{opt} % \textbf{Citation label:} what is written by the |\cite| command % \begin{opt} % \item[--] default is no special font % \item[lab-it] label (names printed by |\cite|) in italics % \item[xlab-it] extra label (letter after year) in italics % \end{opt} % \textbf{Emphasis:} defines what `italicized' really means % \begin{opt} % \item[--] default is |\em| (can switch between |\it| % and |\rm| % \item[em-it] use |\it| instead (always italic) % \item[em-x] no emphasis % \end{opt} % \textbf{Special punctuation:} % \begin{opt} % \item[amper] use \& in place of `and' % \item[and-xcom] no comma before last `and' of an author list (citations and % references) % \item[and-com] add comma before `and' even for two authors (in list of % references) % \item[xand] no `and' in an author list (references) % \item[etal-it] `et al.' in italics % \end{opt} % \textbf{Font commands:} % \begin{opt} % \item[--] use \LaTeX~2.09 font commands % \item[nfss] use |\textbf|, |\textit|, |\emph| in place of |\bf|, |\it|, % and |\em|; only works then with \LaTeXe % \end{opt} % \section{The Menu Information}\label{sec:menu} % Here I describe the options and menu information for this particular % master file \texttt{\filename}. To construct a \dtx{} driver file % to generate a desired \texttt{.bst} file, simply process \texttt{makebst.tex} % with \TeX\ or \LaTeX, and give % \begin{quote}\tt\filename\end{quote} % when prompted for the name of the master file. Then answer the questions % in the menus that follow. The menu information is extracted from here. % All this menu information is nested between \dtx{} guard options % |%<*options>| \dots\ |%|, and the last command is % |\endoptions|. The rest of the file is nested between |%<*!options>| % \dots\ |%| in order to exclude it if \dtx{} is used to % extract only the menu information. % \subsection*{Author-year or numerical} % The first question is whether a numerical or author-year citation style % is to be used. If the latter, the supporting system is my {\tt % natbib.sty}, which expects |\bibitem| to have an optional argument % containing the short form of the authors, plus year in parentheses. % E.g., % \begin{quote} % |\bibitem[Daly et al.(1990)]{key}...| % \end{quote} % There is now a newer version of \texttt{natbib.sty} (v5.3) that % supports an optional full author list too, as % \begin{quote} % |\bibitem[Daly et al.(1990)Daly, Keppler, and Williams]{key}...| % \end{quote} % Other systems are also supported, such as the Harvard family of % bibliography styles (with \texttt{harvard.sty}), which have entries in the % form % \begin{quote} % |\harvarditem[Daly et al.]{Daly, Keppler,|\\ % | and Williams}{1990}{key}...| % \end{quote} % or the astronomy family (with \texttt{astron.sty}) with entries like % \begin{quote} % |\bibitem[\protect\astroncite{Daly et al.}{1990}]{key}...| % \end{quote} % or the Chicago family (with \texttt{chicago.sty}) with entries like % \begin{quote} % |\bibitem[\protect\citeautheryear{Daly, Keppler, and|\\ % | Williams}{Daly et al.}{1990}]{key}...| % \end{quote} % or the so-called ``author-date'' group (with \texttt{authordate1-4.sty}) % with entries of the form % \begin{quote} % |\bibitem[\protect\citename{Daly et al.}1990]{key}...| % \end{quote} % Finally, there is the \texttt{apalike} format of Oren Patashnik, for use % with \texttt{apalike.sty} that has entries of the form % \begin{quote} % |\bibitem[Daly et al., 1990]{key}...| % \end{quote} % In addition to numerical or author-year citation styles, there is also a % \texttt{cite} style available in which the label is the same as the cite % key. This is for listing entire contents of databases with the cite key % visible. % A flag |\ifnumerical| is established because some of the following menu % features depend on which system is to be used. % \begin{macrocode} %<*options> \newif\ifnumerical \numericalfalse \newif\ifmytemp\mytempfalse \mes{^^JSTYLE OF CITATIONS:} \optdef{*}{}{Numerical}{as in standard LaTeX} \optdef{a}{ay}{Author-year}{with some non-standard interface} \optdef{c}{cite}{Cite key}{(special for listing contents of bib file)} \getans \numericaltrue \if\ans a\numericalfalse\fi \ifnumerical\else \mes{^^JAUTHOR-YEAR SUPPORT SYSTEM:} \optdef{*}{}{Natbib}{for use with natbib.sty} \optdef{l}{alk}{Apalike}{for use with apalike.sty} \optdef{h}{har}{Harvard}{system with harvard.sty} \optdef{a}{ast}{Astronomy}{system with astron.sty} \optdef{c}{cay}{Chicago}{system with chicago.sty} \optdef{d}{cn}{Author-date}{system with authordate1-4.sty} \getans % \end{macrocode} % The \texttt{harvard} family has been extended for \LaTeXe, and the new % \texttt{.bst} files allow the word `and' and the brackets around years % to be variable with commands. A URL entry is added, for the on-line % network reference. These features may be added too. % \begin{macrocode} \if\ans h% \mes{^^JHARVARD EXTENSIONS INCLUDED:} \optdef{*}{harnm}{With Harvard extensions}{for LaTeX2e version of harvard.sty} \optdef{n}{}{Older Harvard}{style, for LaTeX 2.09} \getans\fi % \end{macrocode} % \subsection*{Ordering of the listed references} % Choices here depend on citation style. The default in both cases is % alphabetical order of all authors. For numerical style, one may also % choose an unsorted order, which means the order the same as the original % citations. This corresponds to \texttt{unsrt.bst}. % For author-year, the second choice is by label. (The label is the % optional |\bibitem| argument, and is what is printed in place of the % |\cite| command.) With this option, all the papers with the same first % author are ordered so that the one-author papers come first, followed by % the two-author papers, followed by the multiple-author papers. This is a % more sensible system for author-year citations, and is demanded by some % journals (like JGR). % \begin{macrocode} \ifnumerical \mes{^^JORDERING OF REFERENCES:} \optdef{*}{}{Alphabetical}{by all authors} \optdef{c}{seq-no}{Citation order}{(unsorted, like unsrt.bst)} \getans \else \mes{^^JORDERING OF REFERENCES:} \optdef{*}{}{Alphabetical}{by all authors} \optdef{l}{seq-lab}{By label}% {(Jones before Jones and James before Jones et al)} \getans % \end{macrocode} % \subsection*{Selecting Language}\label{babelmenu} % Explicit words in the bibliography style, such as `and', `editor', etc., % are represented by functions \texttt{bbl.and}, \texttt{bbl.editor}, and so on. % By default these functions translate to the normal English text, but % other languages are also possible. All the definitions of these functions % are kept together to simplify the addition of further languages, or to % allow someone to hack the \texttt{.bst} file for another language. %^^A NEWLANGUAGE: add an \optdef here, %^^A say \optdef{x}{newlang}{Name of Language}{} %^^A where newlang is to be the docstrip option name % \begin{macrocode} \mes{^^JLANGUAGE:} \optdef{*}{english}{English}{} \optdef{b}{babel}{Babel}{, word definitions to be found in babelbst.tex} \optdef{g}{german}{German}{} \optdef{f}{french}{French}{} \optdef{e}{espo}{Esperanto}{} \getans % \end{macrocode} % \subsection*{Formatting author names} % The default is that the full names of the authors are listed, given names % first, unabbreviated. Of course, if only the initials have been given in % the \texttt{.bib} file, then that is all that can appear in the list. Other % possibilities are to use initials (even if full names in the \texttt{.bib} % file) either before or after the surnames. A specialty of the journals of % the American Geophysical Union is to have only the first name with % reversed initials. % If the reference is part of a larger work with editors, then the editor % names appear later in the reference text, usually as ``edited by \dots'' % or as ``\emph{names} (editors)''. In these cases, the editor names are % not usually reversed (surname first) even if the authors' names are. % An option is provided to format such editor names exactly as the authors'. % \begin{macrocode} \mes{^^JAUTHOR NAMES:} \optdef{*}{}{Full, surname last}{(John Frederick Smith)} \optdef{i}{nm-init}{Initials + surname}{(J. J. Smith)} \optdef{r}{nm-rev}{Surname + initials}{(Smith, J. J.)} \optdef{s}{nm-rv}{Surname + dotless initials}{(Smith J J)} \optdef{a}{nm-rev1}{Only first name reversed}% {(AGU style: Smith, J. J., H. K. Jones)} \getans \mytempfalse \if\ans r\mytemptrue\fi \if\ans s\mytemptrue\fi \if\ans a\mytemptrue\fi \ifmytemp \mes{^^JEDITOR NAMES IN COLLECTIONS:} \if\ans r \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith} \if\ans s \optdef{*}{}{Editor names NOT reversed}{as edited by J J Smith} \if\ans a \optdef{*}{}{Editor names NOT reversed}{as edited by J. J. Smith} \optdef{r}{ed-rev}{Editor names reversed}{just like authors'} \getans % \end{macrocode} % \subsection*{Number of authors} % Normally the complete list of authors as given in the \texttt{.bib} file are % presented in the reference list. However, some journals prefer to limit % them to a maximum. If there are more than this maximum number of author % names, then a minimum number plus `et al.' are listed. % Because no test for consistency of the numbers is carried out in the % \texttt{.bst} file itself (it might be possible, but I found it too complex), % this is done here. % \begin{macrocode} \mes{^^JNUMBER OF AUTHORS:} \optdef{*}{}{All authors}{included in listing} \optdef{l}{nmlm}{Limited authors}{(et al replaces missing names)} \getans \if\ans l \loop \ask{\num}{Maximum number of authors (1-9)} \ifnum\num>9 \mes{*** Must be between 1 and 9} \repeat \wr{\spsp\spsp\sep x\num\pc: Maximum of \num\space authors} \mes{\spsp You have selected maximum \num\space authors} \ifnum\num>5\def\numx{5}\else\edef\numx{\num}\fi \loop \ask{\num}{Minimum number (before et al given) (1-\numx)} \ifnum\num>\numx \mes{*** Must be between 1 and \numx} \repeat \wr{\spsp\spsp\sep m\num\pc: Minimum of \num\space authors} \mes{\spsp You have selected minimum \num\space authors} % \end{macrocode} % \subsection*{Type face of names} % The author names in the list of references normally appear in the current % type face. This may be changed to small caps, bold, or italics. % \begin{macrocode} \mes{^^JTYPEFACE FOR AUTHORS:} \optdef{*}{}{Normal font for authors}{} \optdef{s}{nmft-sc}{Small caps authors}{(\string\sc)} \optdef{i}{nmft-it}{Italic authors}{(\string\it\space or \string\em)} \optdef{b}{nmft-bf}{Bold authors}{(\string\bf)} \getans % \end{macrocode} % \subsection*{Position of date} % This applies to author-year style only. It makes sense to put the date % immediately after the author list, since the two items (author and year) % are the identifiers of the reference. Default position is at the % end of the references, before any notes. It is also possible to place % it even after the notes. % \begin{macrocode} \mes{^^JDATE POSITION:} \optdef{*}{}{Date at end}{} \optdef{b}{dt-beg}{Date after authors}{} \optdef{e}{dt-end}{Date at very end}{after any notes} \getans \if\ans b\mytemptrue\else\mytempfalse\fi % \end{macrocode} % \subsection*{Format of date} % The year may be enclosed in parentheses, brackets, or preceded by a % colon. If none of these are selected, the date (month plus year) appears. % For author-year, the date always consists only of the year, no month. % If the date is to go inside parentheses or brackets, and it is just after % the authors, then one might want to suppress the following punctuation. % \begin{macrocode} \ifnumerical \mes{^^JDATE FORMAT:} \optdef{*}{}{Month and year}{without any brackets} \optdef{p}{yr-par}{Date in parentheses}{as (May 1993)} \optdef{b}{yr-brk}{Date in brackets}{as [May 1993]} \optdef{c}{yr-col}{Date preceded by colon}{as `: May 1993'} \optdef{d}{yr-per}{Date preceded by period}{as `. May 1993'} \optdef{s}{yr-blk}{Date preceded by space}{only, as ` May 1993'} \else \mes{^^JDATE FORMAT:^^J(no months for author-year)} \optdef{*}{}{Year plain}{without any brackets} \optdef{p}{yr-par}{Year in parentheses}{as (1993)} \optdef{b}{yr-brk}{Year in brackets}{as [1993]} \optdef{c}{yr-col}{Year preceded by colon}{as `: 1993'} \optdef{d}{yr-per}{Year preceded by period}{as `. 1993'} \optdef{s}{yr-blk}{Year preceded by space}{only, as ` 1993'} \getans \if\ans p\else\if\ans b\else\mytempfalse\fi\fi \ifmytemp \mes{^^JDATE PUNCTUATION:} \optdef{*}{}{Date with punctuation}{(comma or period)} \optdef{x}{yrp-x}{No punct. after date}{} \getans % \end{macrocode} % Normally in author-year citations, the \texttt{year} entry is truncated % to the last 4 characters, which should be the 4 digits of the year. Some % users have requested the possibility of suppressing this truncation so % that they may put text in the \texttt{year} field, such as ``in press.'' % \begin{macrocode} \ifnumerical\else \mes{^^JTRUNCATE YEAR:} \optdef{*}{}{Year truncated}{to last 4 digits} \optdef{t}{note-yr}{Year text full}{to allow text in place of digits} \getans % \end{macrocode} % \subsection*{Article title in journal} % The title of an article in a journal or in a collection (a book, or % conference proceedings) may appear plain, in italics, within single % or double quotes. % Furthermore, it may have sentence capitalization (first % word and word following colon) or be capitalized as in the \texttt{.bib} file % entry. That is why it is recommended to capitalize the entry text as it % should appear when fully capitalized, putting words that are always % capitalized in braces. Example: % \begin{quote} % |TITLE="The Results of the {Giotto} Mission"| % \end{quote} % which produces either ``The results of the Giotto mission'' or ``The % Results of the Giotto Mission'', depending on option. % Additionally, the article titles may be fully suppressed. % \begin{macrocode} \mes{^^JTITLE OF ARTICLE:} \optdef{*}{}{Title plain}{with no special font} \optdef{i}{tit-it}{Title italic}{(\string\em)} \optdef{q}{tit-q}{Title in single quotes}{(`Title')} \optdef{d}{tit-qq}{Title in double quotes}{(``Title'')} \getans \mes{^^JCAPITALIZATION OF ARTICLE TITLE:} \optdef{*}{}{Sentence style}{(first word and those in braces)} \optdef{t}{atit-u}{Title style}{(just as in bib entry)} \getans \mes{^^JARTICLE TITLE PRESENT:} \optdef{*}{}{Article title present}{in journals and proceedings} \optdef{x}{jtit-x}{No article title}{} \getans % \end{macrocode} % \subsection*{Title of Theses} % The title of a these (PhD or Master's) is normally treated the same % as that of a book. Optionally, it may be formatted like that of % an article. % \begin{macrocode} \mes{^^JTHESIS TITLE:} \optdef{*}{}{Thesis titles like books}{} \optdef{a}{thtit-a}{Thesis title like article}{} \getans % \end{macrocode} % \subsection*{Journal reference} % Great diversity of opinion exists as to how a journal reference is to be % formatted. It consists of a volume, possibly a number, and page limits. % The number is really only necessary if the page numbers within one volume % start at 1 for each physical `number'. Since journals are often bound % together in one volume later, it makes more sense to number the pages % continuously through the whole volume. However, this is not always so, % and then the `number' is necessary for the full specification. % A number of styles for journal specifications are % \begin{quote} % 21(2):33--55\\ % \textbf{21}(2):33--55\\ % \textit{21}(2), 33--55 % \end{quote} % Here both start and stop page numbers have been given; often only the % start page is wanted. % \begin{macrocode} \mes{^^JJOURNAL VOLUME NUMBER:} \optdef{*}{}{Volume plain}{as vol(num)} \optdef{i}{vol-it}{Volume italic}{as {\string\em\space vol}(num)} \optdef{b}{vol-bf}{Volume bold}{as {\string\bf\space vol}(num)} \optdef{d}{vol-2bf}{Volume and number bold}{as {\string\bf\space vol(num)}} \getans % \end{macrocode} % The form of the `number' is also given: in parentheses, with `no.', % with \#, or omitted. % \begin{macrocode} \mes{^^JJOURNAL VOL AND NUMBER:} \optdef{*}{}{Journal vol(num)}{as 34(2)} \optdef{n}{vnum-nr}{Journal vol, no. num}{as 34, no. 2} \optdef{h}{vnum-h}{Journal vol, \string\# number}{as 34, \string\#2} \optdef{s}{vnum-s}{Journal vol, num}{as 34, 2} \optdef{x}{vnum-x}{Journal vol, no number}{as 34} \getans % \end{macrocode} % It is possible to decide whether the journal name should be % separated from the following specifications with a blank or comma. % \begin{macrocode} \mes{^^JVOLUME PUNCTUATION:} \optdef{*}{}{Volume with colon}{as vol(num):ppp} \optdef{s}{volp-sp}{Volume with colon and space}{as vol(num): ppp} \optdef{c}{volp-com}{Volume with comma}{as vol(num), ppp} \getans \mes{^^JPAGE NUMBERS:} \optdef{*}{}{Start and stop page numbers}{given} \optdef{f}{jpg-1}{Only start page number}{} \getans \mes{^^JJOURNAL NAME PUNCTUATION:} \optdef{*}{}{Comma after journal}{name} \optdef{x}{jnm-x}{Space after journal}{name} \getans % \end{macrocode} % \subsection*{Book title} % The title of a book (as opposed to an article in a book or journal) is % normally italicized. This may be set to the regular font. % \begin{macrocode} \mes{^^JBOOK TITLE:} \optdef{*}{}{Book title italic}{(\string\em)} \optdef{p}{btit-rm}{Book title plain}{(no font command)} \getans % \end{macrocode} % \subsection*{Edited by} % For an article within an edited collection, the normal form is % \begin{quote} % In J. K. James, editor, \emph{Title of Collection} \dots % \end{quote} % An alternative is the form % \begin{quote} % In \emph{Title of Collection}, edited by J. K. James \dots % \end{quote} % \begin{macrocode} \mes{^^JEDITOR STYLE:} \optdef{*}{}{Word editor}{after name of editor} \optdef{b}{edby}{Edited by}{before name of editor} \optdef{p}{edby-par}{`(Edited by..)'}{editor(s) in parentheses} \getans % \end{macrocode} % \subsection*{Block punctuation} % Blocks are logical sections of the reference specification, such as the % author block, the journal block, editor block, etc. These are normally % separated by periods, but alternatively a comma may be used. Another % choice is to use commas except after titles where a period is given. % In this case, one might also want the title of a work in a collection % to be followed by a period. % \begin{macrocode} \mes{^^JPUNCTUATION BETWEEN SECTIONS (BLOCKS):} \optdef{*}{}{Period after blocks}{of authors, title, etc} \optdef{c}{blk-com}{Comma after blocks}{} \optdef{t}{blk-tit}{Only titles with period}{but other blocks commas} \getans \mytempfalse \if\ans c\mytemptrue\fi \if\ans t\mytemptrue\fi \ifmytemp \mes{^^JPUNCTUATION AFTER TITLE OF INCOLLECTION:} \optdef{*}{}{Comma after title in collection}{as Title, in:...} \optdef{p}{in-blk}{Period after title in collection}{as Title. In:...} \getans % \end{macrocode} % \subsection*{`In' with colon} % When referring to works in a collection, one begins the block describing % that collection with `In'. Optionally, one may add a colon. % \begin{macrocode} \mes{^^JPUNCTUATION AFTER `IN':} \optdef{*}{}{Space after `in'}{for editted works or proceedings} \optdef{c}{in-col}{Colon after `in'}{(as `In: ...')} \getans % \end{macrocode} % \subsection*{Final punctuation} % The punctuation at the end of the reference is normally a period. This % may be suppressed. % \begin{macrocode} \mes{^^JFINAL PUNCTUATION:} \optdef{*}{}{Period at very end}{of the listed reference} \optdef{x}{fin-bare}{No period at end}{} \getans % \end{macrocode} % \subsection*{Abbreviations} % A number of words may be abbreviated: pages, editors, volume, chapter, % and so on. The first two may be independently set to abbreviation, the % rest with a single option. % Additionally, the edition numbers may be % output as words (first, second, etc.) or as numbers (1st, 2nd, etc.). % (Recall that the input in the \texttt{.bib} file is always as English % words.) % \begin{macrocode} \mes{^^JABBREVIATE WORD `PAGES':} \optdef{*}{}{`Page(s)'}{(no abbreviation)} \optdef{a}{pp}{`Page' abbreviated}{as p. or pp.} \getans \mes{^^JABBREVIATE WORD `EDITORS':} \optdef{*}{}{`Editor(s)'}{(no abbreviation)} \optdef{a}{ed}{`Editor' abbreviated}{as ed. or eds.} \getans \mes{^^JOTHER ABBREVIATIONS:} \optdef{*}{}{No abbreviations}{of volume, edition, chapter, etc} \optdef{a}{abr}{Abbreviations}{of such words} \getans \mes{^^JEDITION NUMBERS:} \optdef{*}{}{Write out editions}{as first, second, third, etc} \optdef{n}{ord}{Numerical editions}{as 1st, 2nd, 3rd, etc} \getans % \end{macrocode} % \subsection*{Citation label} % This applies to author-year style only. The label is the text written % by the |\cite| command, and for author-year style, this is something like % `Daly et al.\ (1990b)'. One may select italics for the authors and for the % extra label attached to the year. The year always remains plain. % It is not possible to select the type of brackets for the year, since % this is determined by the \LaTeX{} style option that manages the % author-year citations. This is not standard \LaTeX, so that there are a % number of private style files for achieving this. % \begin{macrocode} \ifnumerical\else \mes{^^JFONT OF CITATION LABEL:} \optdef{*}{}{Cited authors plain}{as result of \string\cite\space command} \optdef{i}{lab-it}{Cited authors italic}{} \getans \mes{^^JFONT OF EXTRA LABEL:^^J(The extra letter on the year)} \optdef{*}{}{Extra label plain}{} \optdef{i}{xlab-it}{Extra label italic}{} \getans % \end{macrocode} % \subsection*{Variations on `and'} % It is possible to replace the word `and' with an ampersand \&, and to % specify whether a comma is to precede `and' in a list of more than two % names. % \begin{macrocode} \mes{^^JAMPERSAND:} \optdef{*}{}{Use word `and'}{in author lists} \optdef{a}{amper}{Use ampersand}{in place of `and'} \getans \mes{^^JCOMMA BEFORE `AND':} \optdef{*}{}{Comma before `and'}{as `Tom, Dick, and Harry'} \optdef{n}{and-xcom}{No comma before `and'}{as `Tom, Dick and Harry'} \optdef{c}{and-com}{Comma with 2 authors}{as `Tom, and Harry'} \getans \mes{^^JNO `AND' IN REFERENCE LIST:} \optdef{*}{}{With `and'}{before last author in reference list} \optdef{x}{xand}{No `and'}{as `Tom, Dick, Harry'} \getans % \end{macrocode} % \subsection*{Font of `et al'} % One can chose that `et al.'\ be put into italics. % \begin{macrocode} \mes{^^JFONT OF `ET AL':} \optdef{*}{}{Plain et al}{} \optdef{i}{etal-it}{Italic et al}{} \getans % \end{macrocode} % \subsection*{Define emphasis} % In everything that been mentioned so far, italicization should be % understood to mean `emphasize' in the \LaTeX{} sense. This means that the % command |\em| is used. This is not the same as |\it|, which is always % italics. Rather, with |\em|, the font style switches between |\rm| and % |\it| depending on the context. Here one may choose to true italics, or % to switch off italics altogether. % \begin{macrocode} \mes{^^JEMPHASIS:^^J(affects all so-called italics)} \optdef{*}{}{Use emphasis}{ie, \string\em, allows font switching} \optdef{i}{em-it}{Use true italics}{ie, \string\it, absolute italics} \optdef{x}{em-x}{No italics}{at all} \getans % \end{macrocode} % \subsection*{New Font Selection Scheme} % Bold face, italics, and emphasis are made with the \LaTeX~2.09 commands. % This makes them compatible with \LaTeXe{} as well, but it is possible that % in future they might die out. Also, they might not be provided with % future classes. Allow an option to use the New Font Selection Scheme (NFSS) % font commands in \LaTeXe. If this option is taken, then the \texttt{.bst} % file may only be used with \LaTeXe. % \begin{macrocode} \mes{^^JNEW FONT SELECTION SCHEME:} \optdef{*}{}{No NFSS}{use 2.09 font commands} \optdef{n}{nfss}{NFSS}{use \string\textbf, \string\emph, not \string\bf, \string\em} \getans \endoptions % % \end{macrocode} % \StopEventually{\PrintChanges % \end{document}} % \section{The Bibliographic Coding} % \begin{macrocode} %<*!options&!bblbst> %%--------------------------------------------------------------------- % This bibliography style file is intended for texts in %^^A NEWLANGUAGE: add an entry here, e.g. %^^A % NAME OF LANGUAGE % % ENGLISH % % GERMAN % % FRENCH % % ESPERANTO % % BABEL (definitions of words in babelbst.tex) %<*ay> % This is an author-year citation style bibliography. As such, it is % non-standard LaTeX, and requires a special package file to function properly. % Such a package is natbib.sty by Patrick W. Daly %<*alk> % or: apalike.sty by Oren Patashnik % The form of the \bibitem entries is % \bibitem[Jones et al., 1990]{key}... % %<*!(har|ast|alk|cay|cn)> % The form of the \bibitem entries is % \bibitem[Jones et al.(1990)]{key}... % % \bibitem[Jones et al.(1990)Jones, Baker, and Smith]{key}... % The essential feature is that the label (the part in brackets) consists % of the author names, as they should appear in the citation, with the year % in parentheses following. There must be no space before the opening % parenthesis! % % With natbib v5.3, a full list of authors may also follow the year. % In natbib.sty, it is possible to define the type of enclosures that is % really wanted (brackets or parentheses), but in either case, there must % be parentheses in the label. % The \cite command functions as follows: % \cite{key} ==>> Jones et al. (1990) % \cite[]{key} ==>> (Jones et al., 1990) % \cite[chap. 2]{key} ==>> (Jones et al., 1990, chap. 2) % \cite[e.g.][]{key} ==>> (e.g. Jones et al., 1990) % \cite[e.g.][p. 32]{key} ==>> (e.g. Jones et al., p. 32) % \citeauthor{key} Jones et al. % % \citefullauthor{key} Jones, Baker, and Smith % \citeyear{key} 1990 % %<*har> % or: harvard.sty by Peter Williams and Thorsten Schnier % % (needs natbib v5.3 or harvard v2.0.3) % The form of the bibitem entries is % \harvarditem[Jones et al.]{Jones, Baker, and Smith}{1990}{key}... % %<*cay> % or: chicago.sty % The form of the bibitem entries is % \bibitem[\protect\citeauthoryear{Jones, Baker, and Smith} % {Jones et al.}{1990}{key}... % %<*ast> % or: astron.sty % The form of the bibitem entries is % \bibitem[\protect\astroncite{Jones et al.}{1990}]{key}... % %<*cn> % or: authordate1-4.sty % The form of the bibitem entries is % \bibitem[\protect\citename{Jones et al.}1990]{key}... % % %<*!ay> % This is a numerical citation style, and as such is standard LaTeX. % It requires no extra package to interface to the main text. % The form of the \bibitem entries is % \bibitem{key}... % Usage of \cite is as follows: % \cite{key} ==>> [#] % \cite[chap. 2]{key} ==>> [#, chap. 2] % where # is a number determined by the ordering in the reference list. %<*seq-no> % This is the order in which the works were originally cited in the text. % %<*!seq-no> % This is alphabetical by authors. % % %<*!ay&cite> % This is a special pseudo-numerical bibliography style. The form of % the \bibitem entries is % \bibitem[key]{key}... % It is intended to be used to list all the entries in a bib database % %%--------------------------------------------------------------------- % \end{macrocode} % \changes{2.3}{1994 Sep 16}{Add URL entry type for \texttt{harnm} option} % The new \texttt{harvard.sty} of \LaTeXe{} includes an entry URL, or % rather it is included in the new \texttt{.bst} files for it. Add it % here too, but only for option \texttt{harnm}. % \begin{macrocode} ENTRY { address author booktitle chapter edition editor howpublished institution journal key month note number organization pages publisher school series title type % URL volume year % { label } % { label extra.label sort.label } INTEGERS { output.state before.all mid.sentence after.sentence after.block } FUNCTION {init.state.consts} { #0 'before.all := #1 'mid.sentence := #2 'after.sentence := #3 'after.block := STRINGS { s t } FUNCTION {output.nonnull} { 's := output.state mid.sentence = { ", " * write$ } { output.state after.block = { add.period$ write$ newline$ "\newblock " write$ } { output.state before.all = 'write$ { add.period$ " " * write$ } if$ } if$ mid.sentence 'output.state := } if$ FUNCTION {output} { duplicate$ empty$ 'pop$ 'output.nonnull if$ FUNCTION {output.check} { 't := duplicate$ empty$ { pop$ "empty " t * " in " * cite$ * warning$ } 'output.nonnull if$ FUNCTION {fin.entry} %<*!fin-bare> { add.period$ write$ % %<*fin-bare> { duplicate$ empty$ 'pop$ 'write$ if$ % newline$ FUNCTION {new.block} { output.state before.all = 'skip$ { after.block 'output.state := } if$ FUNCTION {new.sentence} { output.state after.block = 'skip$ { output.state before.all = 'skip$ { after.sentence 'output.state := } if$ } if$ FUNCTION {add.blank} { " " * before.all 'output.state := FUNCTION {not} { { #0 } { #1 } if$ FUNCTION {and} { 'skip$ { pop$ #0 } if$ FUNCTION {or} { { pop$ #1 } 'skip$ if$ % \end{macrocode} % \begin{macro}{`non.stop'} % \changes{2.2a}{1994 Sep 8}{Add to test if last character % is punctuation: . ! ?} % This function (my invention) tests if the last character in the string % on the stack is \texttt{. ! ?} by using \texttt{add.period\$}. It is to % be used for conditional italic correction or adding commas. % \begin{macrocode} FUNCTION {non.stop} { duplicate$ "}" * add.period$ #-1 #1 substring$ "." = % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {new.block.checka} { empty$ 'skip$ 'new.block if$ % FUNCTION {new.block.checkb} { empty$ swap$ empty$ and 'skip$ 'new.block if$ %<*!ay> FUNCTION {new.sentence.checka} { empty$ 'skip$ 'new.sentence if$ FUNCTION {new.sentence.checkb} { empty$ swap$ empty$ and 'skip$ 'new.sentence if$ % FUNCTION {field.or.null} { duplicate$ empty$ { pop$ "" } 'skip$ if$ % \end{macrocode} % \begin{macro}{`emphasize'} % Emphasis can be either italic or the alternating font. The font command % may be NFSS or regular \LaTeX~2.09 declarations. %\changes{2.1}{1994 Jul 1}{Add \texttt{nfss} option} % \begin{macrocode} FUNCTION {emphasize} %<*!em-x> { duplicate$ empty$ { pop$ "" } %<*!nfss> % { "{\em " swap$ * "\/}" * } % { "{\it " swap$ * "\/}" * } % %<*nfss> % { "\emph{" swap$ * "}" * } % { "\textit{" swap$ * "}" * } % if$ % %{ skip$ } %<*nmft-bf|vol-bf|vol-2bf> % \end{macrocode} % \end{macro} % \begin{macro}{`bolden'} % The bold font command may be NFSS or the regular \LaTeX~2.09 declaration. %\changes{2.1}{1994 Jul 1}{Add \texttt{nfss} option} % \begin{macrocode} FUNCTION {bolden} { duplicate$ empty$ { pop$ "" } % { "{\bf " swap$ * "}" * } % { "\textbf{" swap$ * "}" * } if$ % % \end{macrocode} % \end{macro} % \begin{macro}{`space.word'} % \changes{2.0}{1994 Jan 31}{Add function to space out words; necessary % for the multilingual functions.} % The function \texttt{space.word} adds a space before and after the word or % words currently on the stack. This was added for the \texttt{bbl.}$nnn$ % functions, that contain only a word without spacing, but replace explicit % text in the originals that were spaced out. Its seems more flexible to % define the word functions to be without spacing. % \begin{macrocode} FUNCTION {space.word} { " " swap$ * " " * } % Here are the language-specific definitions for explicit words. % Each function has a name bbl.xxx where xxx is the English word. % \end{macrocode} % \end{macro} %^^A NEWLANGUAGE: take everything from here to \end{macrocode} %^^A copy it, change english to newlang, change the English words. %^^A Also change the introductory text accordingly (lines preceding %^^A \begin{macrocode}. These lines beginning with %^^A may be left off. %^^A If a double-quote is to appear (see German bbl.fifth), use \qq %^^A instead and change begin.bib as for German. % \begin{macro}{`bbl.xxx'} % \changes{2.0}{1994 Jan 31}{Replace all explicit words with functions % of the form \texttt{bbl.xxx}.} % These are the default English words. In fact, there is no default, for % even English must be given explicitly as an option. This is due to the % nature of \dtx{} in which the default can only be selected by % negating all the other languages. This would make adding languages % difficult. Furthermore, \btx{} does not allow an existing function to % be redefined. % \begin{macrocode} %<*english> % The language selected here is ENGLISH FUNCTION {bbl.and} { "and"} FUNCTION {bbl.editors} %{ "editors" } %{ "eds." } FUNCTION {bbl.editor} %{ "editor" } %{ "ed." } FUNCTION {bbl.edby} { "edited by" } FUNCTION {bbl.edition} %{ "edition" } %{ "edn." } FUNCTION {bbl.vvolume} %{ "Volume" } %{ "Vol." } FUNCTION {bbl.volume} %{ "volume" } %{ "vol." } FUNCTION {bbl.of} { "of" } FUNCTION {bbl.nnumber} %{ "Number" } %{ "No." } FUNCTION {bbl.number} %{ "number" } %{ "no." } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.iin} { "In" } FUNCTION {bbl.pages} %{ "pages" } %{ "pp." } FUNCTION {bbl.page} %{ "page" } %{ "p." } FUNCTION {bbl.chapter} %{ "chapter" } %{ "chap." } FUNCTION {bbl.techrep} %{ "Technical Report" } %{ "Tech. Rep." } FUNCTION {bbl.mthesis} { "Master's thesis" } FUNCTION {bbl.phdthesis} { "Ph.D. thesis" } FUNCTION {bbl.first} %{ "First" } %{ "1st" } FUNCTION {bbl.second} %{ "Second" } %{ "2nd" } FUNCTION {bbl.third} %{ "Third" } %{ "3rd" } FUNCTION {bbl.fourth} %{ "Fourth" } %{ "4th" } FUNCTION {bbl.fifth} %{ "Fifth" } %{ "5th" } FUNCTION {bbl.st} { "st" } FUNCTION {bbl.nd} { "nd" } FUNCTION {bbl.rd} { "rd" } FUNCTION {bbl.th} { "th" } % %^^A When editions numbers extended, change text. Look for maxeds. % \end{macrocode} % Here are the definitions for \texttt{babel} option, i.e., explicit % translations are not used, but rather only \LaTeX{} macros that must be % defined in the file \texttt{babelbst.tex}. This could allow automatic % language selection. % \begin{macrocode} %<*babel> % The BABEL language selection is made here; definitions in babelbst.tex. FUNCTION {bbl.and} { "\bbland{}"} FUNCTION {bbl.editors} %{ "\bbleditors{}" } %{ "\bbleds{}" } FUNCTION {bbl.editor} %{ "\bbleditor{}" } %{ "\bbled{}" } FUNCTION {bbl.edby} { "\bbledby{}" } FUNCTION {bbl.edition} %{ "\bbledition{}" } %{ "\bbledn{}" } FUNCTION {bbl.vvolume} %{ "\bblVolume{}" } %{ "\bblVol{}" } FUNCTION {bbl.volume} %{ "\bblvolume{}" } %{ "\bblvol{}" } FUNCTION {bbl.of} { "\bblof{}" } FUNCTION {bbl.nnumber} %{ "\bblNumber{}" } %{ "\bblNo{}" } FUNCTION {bbl.number} %{ "\bblnumber{}" } %{ "\bblno{}" } FUNCTION {bbl.nr} { "\bblno{}" } FUNCTION {bbl.in} { "\bblin{}" } FUNCTION {bbl.iin} { "\bblIn{}" } FUNCTION {bbl.pages} %{ "\bblpages{}" } %{ "\bblpp{}" } FUNCTION {bbl.page} %{ "\bblpage{}" } %{ "\bblp{}" } FUNCTION {bbl.chapter} %{ "\bblchapter{}" } %{ "\bblchap{}" } FUNCTION {bbl.techrep} %{ "\bbltechreport{}" } %{ "\bbltechrep{}" } FUNCTION {bbl.mthesis} { "\bblmthesis{}" } FUNCTION {bbl.phdthesis} { "\bblphdthesis{}" } FUNCTION {bbl.first} %{ "\bblfirst{}" } %{ "\bblfirsto{}" } FUNCTION {bbl.second} %{ "\bblsecond{}" } %{ "\bblsecondo{}" } FUNCTION {bbl.third} %{ "\bblthird{}" } %{ "\bblthirdo{}" } FUNCTION {bbl.fourth} %{ "\bblfourth{}" } %{ "\bblfourtho{}" } FUNCTION {bbl.fifth} %{ "\bblfifth{}" } %{ "\bblfiftho{}" } FUNCTION {bbl.st} { "\bblst" } FUNCTION {bbl.nd} { "\bblnd" } FUNCTION {bbl.rd} { "\bblrd" } FUNCTION {bbl.th} { "\bblth" } % % \end{macrocode} % The German translations of the explicit word functions. % \begin{macrocode} %<*german> % The language selected here is GERMAN FUNCTION {bbl.and} { "und"} FUNCTION {bbl.editors} %{ "Redakteure" } %{ "Red." } FUNCTION {bbl.editor} %{ "Redakteur" } %{ "Red." } FUNCTION {bbl.edby} { "herausgegeben von" } FUNCTION {bbl.edition} %{ "Auflage" } %{ "Aufl." } FUNCTION {bbl.vvolume} %{ "Band" } %{ "Bd." } FUNCTION {bbl.volume} %{ "Band" } %{ "Bd." } FUNCTION {bbl.of} { "von" } FUNCTION {bbl.nnumber} %{ "Nummer" } %{ "No." } FUNCTION {bbl.number} %{ "Nummer" } %{ "Nr." } FUNCTION {bbl.nr} { "Nr." } FUNCTION {bbl.in} { "in" } FUNCTION {bbl.iin} { "In" } FUNCTION {bbl.pages} %{ "Seiten" } %{ "S." } FUNCTION {bbl.page} %{ "Seite" } %{ "S." } FUNCTION {bbl.chapter} %{ "Kapitel" } %{ "Kap." } FUNCTION {bbl.techrep} %{ "Technischer Bericht" } %{ "Tech. Ber." } FUNCTION {bbl.mthesis} { "Diplomarbeit" } FUNCTION {bbl.phdthesis} { "Doktorarbeit" } FUNCTION {bbl.first} %{ "Erste" } %{ "1." } FUNCTION {bbl.second} %{ "Zweite" } %{ "2." } FUNCTION {bbl.third} %{ "Dritte" } %{ "3." } FUNCTION {bbl.fourth} %{ "Vierte" } %{ "4." } FUNCTION {bbl.fifth} %{ "F\qq{u}nfte" } %{ "5." } FUNCTION {bbl.th} { "." } % % \end{macrocode} % The French translations of the explicit word functions. % \begin{macrocode} %<*french> % The language selected here is FRENCH FUNCTION {bbl.and} { "et"} FUNCTION {bbl.editors} %{ "r\'edacteurs" } %{ "r\'eds." } FUNCTION {bbl.editor} %{ "r\'edacteur" } %{ "r\'ed." } FUNCTION {bbl.edby} { "edit\'e par" } FUNCTION {bbl.edition} %{ "\'edition" } %{ "\'edn." } FUNCTION {bbl.vvolume} %{ "Tome" } %{ "Tm." } FUNCTION {bbl.volume} %{ "tome" } %{ "tm." } FUNCTION {bbl.of} { "de" } FUNCTION {bbl.nnumber} %{ "Num\'ero" } %{ "No." } FUNCTION {bbl.number} %{ "num\'ero" } %{ "no." } FUNCTION {bbl.nr} { "no." } FUNCTION {bbl.in} { "dans" } FUNCTION {bbl.iin} { "Dans" } FUNCTION {bbl.pages} %{ "pages" } %{ "pp." } FUNCTION {bbl.page} %{ "page" } %{ "p." } FUNCTION {bbl.chapter} %{ "chapitre" } %{ "chap." } FUNCTION {bbl.techrep} %{ "Rapport technique" } %{ "Rap. tech." } FUNCTION {bbl.mthesis} { "Th\`ese de ma\^itre" } FUNCTION {bbl.phdthesis} { "Th\`ese de doctorat" } FUNCTION {bbl.first} %{ "Premi\`ere" } %{ "1$^{\mbox{\scriptsize re}}$" } FUNCTION {bbl.second} %{ "Deuxi\`eme" } %{ "2$^{\mbox{\scriptsize e}}$" } FUNCTION {bbl.third} %{ "Troisi\`eme" } %{ "3$^{\mbox{\scriptsize e}}$" } FUNCTION {bbl.fourth} %{ "Quatri\`eme" } %{ "4$^{\mbox{\scriptsize e}}$" } FUNCTION {bbl.fifth} %{ "Cinqui\`eme" } %{ "5$^{\mbox{\scriptsize e}}$" } FUNCTION {bbl.th} { "$^{\mbox{\scriptsize e}}$" } % % \end{macrocode} % The Esperanto translations of the explicit word functions. % \begin{macrocode} %<*espo> % The language selected here is ESPERANTO FUNCTION {bbl.and} { "kaj"} FUNCTION {bbl.editors} %{ "redaktoroj" } %{ "red-oj" } FUNCTION {bbl.editor} %{ "redaktoro" } %{ "red-o" } FUNCTION {bbl.edby} { "redaktito de" } FUNCTION {bbl.edition} %{ "eldono" } %{ "eld." } FUNCTION {bbl.vvolume} %{ "Volumo" } %{ "Vol." } FUNCTION {bbl.volume} %{ "volumo" } %{ "vol." } FUNCTION {bbl.of} { "el" } FUNCTION {bbl.nnumber} %{ "Numero" } %{ "N-ro" } FUNCTION {bbl.number} %{ "numero" } %{ "n-ro" } FUNCTION {bbl.nr} { "n-ro" } FUNCTION {bbl.in} { "en" } FUNCTION {bbl.iin} { "En" } FUNCTION {bbl.pages} %{ "pa\^goj" } %{ "pp." } FUNCTION {bbl.page} %{ "pa\^go" } %{ "p\^g" } FUNCTION {bbl.chapter} %{ "\^capitro" } %{ "\^cap." } FUNCTION {bbl.techrep} %{ "Teknica Raporto" } %{ "Tek. Rap." } FUNCTION {bbl.mthesis} { "Magistra tezo" } FUNCTION {bbl.phdthesis} { "Doktora tezo" } FUNCTION {bbl.first} %{ "Unua" } %{ "1-a" } FUNCTION {bbl.second} %{ "Dua" } %{ "2-a" } FUNCTION {bbl.third} %{ "Tria" } %{ "3-a" } FUNCTION {bbl.fourth} %{ "Kvara" } %{ "4-a" } FUNCTION {bbl.fifth} %{ "Kvina" } %{ "5-a" } FUNCTION {bbl.th} { "-a" } % % \end{macrocode} % \end{macro} % \begin{macro}{`write.url'} % \changes{2.3}{1994 Sep 16}{Add \texttt{write.url} for option \texttt{harnm}} % This function taken over from \texttt{agsm.sty}, the main \texttt{harvard} % bib style. % \begin{macrocode} %<*harnm> FUNCTION {write.url} { URL empty$ { skip$ } { "\newline\harvardurl{" URL * "}" * write$ newline$ } if$ % % \end{macrocode} % \end{macro} % \begin{macro}{`format.names'} % \changes{2.3}{1994 Sep 16}{Add \texttt{harvard} command for `and' with % new option \texttt{harnm}} % The \texttt{harvard} package now (version 2.0.3, for \LaTeXe) uses % |\harvardand| in place of the word `and' so that it can be changed % at run time. This is allowed for with the option \texttt{harnm}, which % need not be used only with the \texttt{har} option. % This seems like a useless feature for \texttt{.bst} files made from % this multilanguage source. However, it is included anyway, which means % if \texttt{harnm} option selected, one must redefine |\harvardand| % in the document for the language being used. % \begin{macrocode} INTEGERS { nameptr namesleft numnames } FUNCTION {format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } %<*!nm-rev1> { s nameptr % "{ff~}{vv~}{ll}{, jj}" format.name$ 't := % "{f.~}{vv~}{ll}{, jj}" format.name$ 't := % "{vv~}{ll}{, jj}{, f.}" format.name$ 't := % "{vv~}{ll}{ jj}{ f{~}}" format.name$ 't := % %<*nm-rev1> { nameptr #1 > { s nameptr "{f.~}{vv~}{ll}{, jj}" format.name$ 't := } { s nameptr "{vv~}{ll}{, jj}{, f.}" format.name$ 't := } if$ % nameptr #1 > { %<*nmlm> % nameptr #2 = % nameptr #3 = % nameptr #4 = % nameptr #5 = % nameptr #6 = % numnames #1 > and % numnames #2 > and % numnames #3 > and % numnames #4 > and % numnames #5 > and % numnames #6 > and % numnames #7 > and % numnames #8 > and % numnames #9 > and { "others" 't := #1 'namesleft := } 'skip$ if$ % namesleft #1 > { ", " * t * } { % "," * %<*!and-xcom&!and-com&!xand> numnames #2 > { "," * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } % { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ % \end{macrocode} % \end{macro} % \begin{macro}{`format.names.ed'} % \changes{2.4}{1995 Feb 2}{Add option \texttt{ed-rev} to allow editor % to be formatted just like authors'} % When editors are used in place of authors to identify the work, the % names are always formatted just like authors'. However, in collections, % where ``edited by'' or ``\emph{names} (editors)'' are given, it is % normal not the reverse the names, even if the authors' are. The option % \texttt{ed-rev} sees to it that editor names are always formatted exactly % like those of authors, being reversed if necessary. % \begin{macrocode} FUNCTION {format.names.ed} %{ format.names } %<*!ed-rev> { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr % "{ff~}{vv~}{ll}{, jj}" % "{f.~}{vv~}{ll}{, jj}" % "{f{~}~}{vv~}{ll}{ jj}" format.name$ 't := nameptr #1 > { namesleft #1 > { ", " * t * } { % "," * %<*!and-xcom&!and-com&!xand> numnames #2 > { "," * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } % { " " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ % % \end{macrocode} % \end{macro} % \begin{macrocode} %<*ay> FUNCTION {format.key} { empty$ { key field.or.null } { "" } if$ % FUNCTION {format.authors} { author empty$ { "" } % { author format.names } % { "{\sc " author format.names * "}" * } % { author format.names bolden } % { author format.names emphasize } if$ FUNCTION {format.editors} { editor empty$ { "" } % { editor format.names % { "{\sc " editor format.names * "}" * % { editor format.names bolden % { editor format.names emphasize editor num.names$ #1 > { ", " * bbl.editors * } { ", " * bbl.editor * } if$ } if$ FUNCTION {format.in.editors} { editor empty$ { "" } { editor format.names.ed %<*!edby&!edby-par> editor num.names$ #1 > { ", " * bbl.editors * } { ", " * bbl.editor * } if$ % } if$ % \end{macrocode} % \begin{macro}{`format.title'} % \changes{2.2a}{1994 Sep 7}{Add enquote function to put titles in quotes, % such that punctuation is inside quotes.} % \begin{macrocode} FUNCTION {format.title} { title empty$ { "" } % { title "t" change.case$ % { title % emphasize %<*!tit-it&(tit-q|tit-qq)> "\enquote{" swap$ * %<*blk-com> non.stop { ",} " * } { "} " * } if$ % % add.period$ "}" * % } if$ % \end{macrocode} % \end{macro} % \begin{macro}{`make.full.names'} % \changes{1.1}{1993 Nov 12}{Add key labels to \texttt{calc.long.label} and % get {\tt'author} and {\tt'editor} in right order when author % missing.} % \changes{2.2}{1994 Sep 5}{Remove \texttt{calc.long.label} and % \texttt{format.long.lab.names}, replacing them with % \texttt{format.full.names}, \texttt{make.full.names}, and adding % \texttt{author.editor.key}, \texttt{author.key}, and \texttt{editor.key}} % \changes{2.2a}{1994 Sep 7}{Remove option \texttt{and-com} from % \texttt{make.full.names}} % \changes{2.3}{1994 Sep 15}{Add full names for \texttt{natbib} v5.3} % In versions before 2.2, there were two functions \texttt{calc.long.label} % and \texttt{format.long.lab.names} that made up the string % \texttt{long.label} for each entry. This contains the full author list. % However, there was a bug in the one routine, entered by mistake when an % earlier bug was removed, and more seriously, the string % \texttt{long.label} was limited to \texttt{entry.max\$} characters, 100 on % my system. Author lists were truncated. Thus, \texttt{make.full.names} % is used instead to enter the full list of names directly in the % \texttt{output.bibitem} function, without an intermediate string. This % involves changing the order of some function definitions, especially % \texttt{output.bibitem} must come later. % \begin{macrocode} %<*har|cay|nat> FUNCTION {format.full.names} {'s := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { s nameptr "{vv~}{ll}" format.name$ 't := nameptr #1 > { %<*nmlm> % nameptr #2 = % nameptr #3 = % nameptr #4 = % nameptr #5 = % nameptr #6 = % numnames #1 > and % numnames #2 > and % numnames #3 > and % numnames #4 > and % numnames #5 > and % numnames #6 > and % numnames #7 > and % numnames #8 > and % numnames #9 > and { "others" 't := #1 'namesleft := } 'skip$ if$ % namesleft #1 > { ", " * t * } { %<*!and-xcom> numnames #2 > { "," * } 'skip$ if$ % t "others" = % { " et~al." * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * t * } % { " \& " * t * } % % { " \harvardand\ " * t * } if$ } if$ } 't if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ FUNCTION {author.editor.key.full} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ } { author format.full.names } if$ FUNCTION {author.key.full} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.full.names } if$ FUNCTION {editor.key.full} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.full.names } if$ FUNCTION {make.full.names} { type$ "book" = type$ "inbook" = 'author.editor.key.full { type$ "proceedings" = 'editor.key.full 'author.key.full if$ } if$ % emphasize % % \end{macrocode} % \end{macro} % \begin{macro}{`output.bibitem'} %\changes{1.1}{1993 Nov 12}{Test for missing year, set to {\tt????}.} % The \texttt{output.bibitem} function formats the |\bibitem| entries. %\changes{2.2}{1994 Sep 5}{Move to later location, add % \texttt{make.full.names} instead of inserting string \texttt{long.label}} %\changes{2.3}{1994 Sep 16}{Add option \texttt{nat} for full author list % for \texttt{natbib.sty} version~5.3} % \begin{macrocode} FUNCTION {output.bibitem} { newline$ %<*ay> % "\bibitem[" write$ % "\harvarditem[" write$ % "\protect\astroncite{" write$ % "\protect\citeauthoryear{" make.full.names * "}{" * write$ % "\protect\citename{" write$ label write$ % "]{" make.full.names * "}{" * write$ % year duplicate$ empty$ % ", }" year duplicate$ empty$ % "}{" year duplicate$ empty$ % { pop$ "????" } % 'skip$ % if$ % extra.label * "}{" * write$ % * extra.label * "]{" * write$ % * extra.label * "}]{" * write$ % "]{" write$ % ")]{" write$ % ")" make.full.names * "]{" * write$ % % "\bibitem{" write$ % "\bibitem[" label * "]{" * write$ cite$ write$ "}" write$ newline$ before.all 'output.state := % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {n.dashify} { 't := { t empty$ not } { t #1 #1 substring$ "-" = { t #1 #2 substring$ "--" = not { "--" * t #2 global.max$ substring$ 't := } { { t #1 #1 substring$ "-" = } { "-" * t #2 global.max$ substring$ 't := } while$ } if$ } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } if$ } while$ % \end{macrocode} % \begin{macro}{`word.in'} % \changes{2.0}{1994 Jan 31}{Function \texttt{word.in} constructed out of % \texttt{bbl.in} or \texttt{bbl.iin}.} % The function \texttt{word.in} prints the word ``in'' for references that are % contained in a larger work, or in conference proceedings. One may have a % colon after the word with the option \texttt{in-col}. If blocks of text are % to be separated with commas (option \texttt{blk-com}) then the word remains % in lower case, as it is defined in \texttt{bbl.in}; but if blocks act as % sentences, then it must be capitalized by using \texttt{bbl.iin}. % \begin{macrocode} FUNCTION {word.in} %{ bbl.in %{ bbl.iin % ":" * " " * } % \end{macrocode} % \end{macro} % \begin{macro}{`format.date'} % \changes{2.2}{1994 Sep 6}{Add option \texttt{yr-per} to put period % before date} % \changes{2.3}{1994 Sep 16}{Add \texttt{harvard} bracket names to year % with new option \texttt{harnm}} % \changes{2.4}{1995 Feb 2}{Add \texttt{yr-blk} for no punctuation before % the date} % The new \texttt{harvard.sty} allows variable brackets around the date % in the reference list. It uses |\harvardyearleft| and |\harvardyearright| % in the \texttt{.bst} files. Allow this with the option \texttt{harnm}, % which could actually be used without the \texttt{har} option. Note that % this overrides the other year formatting options. % \begin{macrocode} %<*ay> FUNCTION {format.date} { year duplicate$ empty$ { "empty year in " cite$ * "; set to ????" * warning$ pop$ "????" } 'skip$ if$ %<*!harnm> % before.all 'output.state := % " (" swap$ * extra.label * ")" * % " [" swap$ * extra.label * "]" * % ": " swap$ * extra.label * % after.sentence 'output.state := % " " swap$ * % extra.label * % % " \harvardyearleft " swap$ * extra.label * " \harvardyearright " * % %<*!ay> FUNCTION {format.date} { year empty$ { month empty$ { "" } { "there's a month but no year in " cite$ * warning$ month } if$ } { month empty$ 'year { month " " * year * } if$ } if$ % before.all 'output.state := % " (" swap$ * ")" * % " [" swap$ * "]" * % ": " swap$ * % after.sentence 'output.state := % " " swap$ * % % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {format.btitle} %{ title emphasize %{ title FUNCTION {tie.or.space.connect} { duplicate$ text.length$ #3 < { "~" } { " " } if$ swap$ * * FUNCTION {either.or.check} { empty$ 'pop$ { "can't use both " swap$ * " fields in " * cite$ * warning$ } if$ FUNCTION {format.bvolume} { volume empty$ { "" } { bbl.volume volume tie.or.space.connect series empty$ 'skip$ { bbl.of space.word * series emphasize * } if$ "volume and number" number either.or.check } if$ FUNCTION {format.number.series} { volume empty$ { number empty$ { series field.or.null } { output.state mid.sentence = { bbl.number } { bbl.nnumber } if$ number tie.or.space.connect series empty$ { "there's a number but no series in " cite$ * warning$ } { bbl.in space.word * series * } if$ } if$ } { "" } if$ % \end{macrocode} % \begin{macro}{`is.num'} % \changes{2.0}{1994 Jan 31}{Add function to test for digit.} % This function takes the single-character string on the stack and returns % 1 if it is a digit, else 0. % \begin{macrocode} FUNCTION {is.num} { chr.to.int$ duplicate$ "0" chr.to.int$ < not swap$ "9" chr.to.int$ > not and % \end{macrocode} % \end{macro} % \begin{macro}{`extract.num'} % \changes{2.0}{1994 Jan 31}{Add function to extract leading number from % a literal string.} % This function tests the string on the stack to see if it begins with a % number. If so, that number is left on the stack; if the string contains % no numbers at the start, it is left unchanged. The idea is to convert % `1st' to `1' and leave `first' as is. This is used by {\tt % convert.edition}. % \begin{macrocode} FUNCTION {extract.num} { duplicate$ 't := "" 's := { t empty$ not } { t #1 #1 substring$ t #2 global.max$ substring$ 't := duplicate$ is.num { s swap$ * 's := } { pop$ "" 't := } if$ while$ s empty$ 'skip$ { pop$ s } if$ % \end{macrocode} % \end{macro} % \begin{macro}{`eng.ord'} % \changes{2.0}{1994 Jan 31}{Add function to format English ordinals.} % This function adds English endings for ordinals 1, 2, 3. However, if % the second last digit is 1, then the ending is `th' for all last digits. % So far, all other languages included do not have this problem, and it is % sufficient to add the `th' equivalent. This might change with further % languages. % This function must be included with \texttt{babel} too, since that includes % English. This means that the language definition files must also provide % for |\bblst|, |\bblnd|, and |\bblrd|, setting them all equal to |\bblth|. %^^A NEWLANGUAGE: read the above paragraphs and decide if your language %^^A needs something like this too. If so, start hacking. % \begin{macrocode} %<*english|babel> FUNCTION {eng.ord} { duplicate$ "1" swap$ * #-2 #1 substring$ "1" = { bbl.th * } { duplicate$ #-1 #1 substring$ duplicate$ "1" = { pop$ bbl.st * } { duplicate$ "2" = { pop$ bbl.nd * } { "3" = { bbl.rd * } { bbl.th * } if$ } if$ } if$ } if$ % % \end{macrocode} % \end{macro} % \begin{macro}{`convert.edition'} % \changes{2.0}{1994 Jan 31}{Add function to convert \texttt{edition} entry % text from word to a function} % The function \texttt{convert.edition} takes the text in the field % \texttt{edition} and changes it to the language-specific equivalent. As % originally planned for \btx, this field should contain the words `First', % `Second', etc. Being so explicit, it is not so easy to translate, nor to % convert to `1st', `2nd', etc., if one wanted. This function carries out % the translation, by changing `first' or `1' to \texttt{bbl.first}, and so % on. The field is reduced to lower case to make it case insensitive. If no % translation is found, then the original text in \texttt{edition} is used % instead, as it stands. However, if the original is a number greater than % the maximum for which text is provided, then \texttt{bbl.th} is added to % it. % \begin{macrocode} FUNCTION {convert.edition} { edition extract.num "l" change.case$ 's := s "first" = s "1" = or { bbl.first 't := } { s "second" = s "2" = or { bbl.second 't := } { s "third" = s "3" = or { bbl.third 't := } { s "fourth" = s "4" = or { bbl.fourth 't := } { s "fifth" = s "5" = or { bbl.fifth 't := } { s #1 #1 substring$ is.num % { s bbl.th * 't := } % { s eng.ord 't := } { edition 't := } if$ } if$ } if$ } if$ } if$ } if$ % \end{macrocode} % \end{macro} % \begin{macro}{`format.edition'} % \changes{2.0}{1994 Jan 31}{Add call to \texttt{convert.edition}} % This function formats the text for the edition specification, such as % ``Second edition''. It combines the edition number with the word % `edition'. % \begin{macrocode} FUNCTION {format.edition} { edition empty$ { "" } { output.state mid.sentence = { convert.edition "l" change.case$ " " * bbl.edition * } { convert.edition "t" change.case$ " " * bbl.edition * } if$ } if$ % \end{macrocode} % \end{macro} % \begin{macrocode} INTEGERS { multiresult } FUNCTION {multi.page.check} { 't := #0 'multiresult := { multiresult not t empty$ not and } { t #1 #1 substring$ duplicate$ "-" = swap$ duplicate$ "," = swap$ "+" = or or { #1 'multiresult := } { t #2 global.max$ substring$ 't := } if$ } while$ multiresult FUNCTION {format.pages} { pages empty$ { "" } { pages multi.page.check { bbl.pages pages n.dashify tie.or.space.connect } { bbl.page pages tie.or.space.connect } if$ } if$ %<*jpg-1|pg-1> FUNCTION {first.page} { 't := { t empty$ not t #1 #1 substring$ "-" = not and } { t #1 #1 substring$ * t #2 global.max$ substring$ 't := } while$ % % \end{macrocode} % \begin{macro}{`format.vol.num.pages'} % \changes{2.2}{1994 Sep 6}{Add option \texttt{volp-sp} to put space % after colon in vol:~page.} % \changes{2.3c}{1995 Jan 20}{Add options \texttt{vnum-h}, \texttt{vnum-nr} % and \texttt{vnum-x} for various formats of journal vol number} % \changes{2.4}{1995 Feb 2}{Add option \texttt{vnum-s}} % \begin{macrocode} FUNCTION {format.vol.num.pages} { volume field.or.null % bolden % emphasize %<*!vnum-x> number empty$ 'skip$ { % "(" number * ")" * * % ", no." number tie.or.space.connect * % ", \#" number * * % ", " number * * % bolden volume empty$ { "there's a number but no volume in " cite$ * warning$ } 'skip$ if$ } if$ % pages empty$ 'skip$ { duplicate$ empty$ { pop$ format.pages } % { ":" * pages n.dashify * } % { ": " * pages n.dashify * } % { ", " * pages n.dashify * } % { ":" * pages first.page * } % { ": " * pages first.page * } % { ", " * pages first.page * } if$ } if$ % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {format.chapter.pages} { chapter empty$ 'format.pages { type empty$ { bbl.chapter } { type "l" change.case$ } if$ chapter tie.or.space.connect pages empty$ 'skip$ { ", " * format.pages * } if$ } if$ % \end{macrocode} % \begin{macro}{`format.in.ed.booktitle'} % \changes{2.3b}{1995 Jan 18}{Add option \texttt{edby-par} to put editors % in parentheses} % \changes{2.4}{1995 Feb 2}{If \texttt{ed} and \texttt{edby} given together, % abbreviate `edited by' to `ed(s).'} % \begin{macrocode} FUNCTION {format.in.ed.booktitle} { booktitle empty$ { "" } { editor empty$ { word.in booktitle emphasize * } % { word.in format.in.editors * ", " * % booktitle emphasize * } %<*edby|edby-par> { word.in booktitle emphasize * %<*!ed> % ", " * bbl.edby * " " * % " (" * % bbl.edby "u" change.case$ "t" change.case$ * " " * % %<*ed> % ", " * % " (" * editor num.names$ #1 > 'bbl.editors 'bbl.editor if$ % "u" change.case$ "t" change.case$ * " " * % format.in.editors * % ")" * } % if$ } if$ % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {empty.misc.check} { author empty$ title empty$ howpublished empty$ month empty$ year empty$ note empty$ and and and and and key empty$ not and { "all relevant fields are empty in " cite$ * warning$ } 'skip$ if$ % FUNCTION {format.thesis.type} { type empty$ 'skip$ { pop$ type "t" change.case$ } if$ FUNCTION {format.tr.number} { type empty$ { bbl.techrep } 'type if$ number empty$ { "t" change.case$ } { number tie.or.space.connect } if$ % \end{macrocode} % \begin{macro}{`format.article.crossref'} %\changes{2.1}{1994 Jul 1}{Emphasize \texttt{journal} with \texttt{emphasize}, % not explicitly} % The \texttt{journal} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.article.crossref} %<*!ay> key empty$ { journal empty$ { "need key or journal for " cite$ * " to crossref " * crossref * warning$ "" } { word.in journal emphasize * } if$ } { word.in key * " " *} if$ % % word.in " \cite{" * crossref * "}" * % \end{macrocode} % \end{macro} % \begin{macrocode} %<*!ay> FUNCTION {format.crossref.editor} { editor #1 "{vv~}{ll}" format.name$ editor num.names$ duplicate$ #2 > % { pop$ " et~al." * } % { pop$ " " * "et~al." emphasize * } { #2 < 'skip$ { editor #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = % { " et~al." * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * editor #2 "{vv~}{ll}" format.name$ * } % { " \& " * editor #2 "{vv~}{ll}" format.name$ * } % % { " \harvardand\ " * editor #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ % % \end{macrocode} % \begin{macro}{`format.book.crossref'} %\changes{2.1}{1994 Jul 1}{Emphasize \texttt{series} with \texttt{emphasize}, % not explicitly} % The \texttt{series} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.book.crossref} { volume empty$ { "empty volume in " cite$ * "'s crossref of " * crossref * warning$ word.in } %<(blk-com|blk-tit)> { bbl.volume volume tie.or.space.connect % { bbl.vvolume volume tie.or.space.connect bbl.of space.word * } if$ %<*!ay> editor empty$ editor field.or.null author field.or.null = { key empty$ { series empty$ { "need editor, key, or series for " cite$ * " to crossref " * crossref * warning$ "" * } { series emphasize * } if$ } { key * } if$ } { format.crossref.editor * } if$ % " \cite{" * crossref * "}" * % \end{macrocode} % \end{macro} % \begin{macro}{`format.incoll.inproc.crossref'} %\changes{2.1}{1994 Jul 1}{Emphasize \texttt{booktitle} with % \texttt{emphasize}, not explicitly} % The \texttt{booktitle} field was emphasized emplicitly, but it should be % done by command. % \begin{macrocode} FUNCTION {format.incoll.inproc.crossref} %<*!ay> editor empty$ editor field.or.null author field.or.null = { key empty$ { booktitle empty$ { "need editor, key, or booktitle for " cite$ * " to crossref " * crossref * warning$ "" } { word.in booktitle emphasize * } if$ } { word.in key * " " *} if$ } { word.in format.crossref.editor * " " *} if$ % % word.in " \cite{" * crossref * "}" * % \end{macrocode} % \end{macro} % \changes{2.3b}{1995 Jan 18}{Add option \texttt{yrp-x} to suppress % punctuation following date at beginning} % \begin{macrocode} FUNCTION {article} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block %<*!jtit-x> format.title "title" output.check % before.all 'output.state := % new.block % new.sentence % crossref missing$ { journal emphasize "journal" output.check % add.blank format.vol.num.pages output % format.date "year" output.check } { format.article.crossref output.nonnull format.pages output } if$ % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % \end{macrocode} %\changes{2.0a}{1994 Aug 30}{Fix up \texttt{new.sentence} so not added with % \texttt{blk-com}} % \begin{macrocode} FUNCTION {book} { output.bibitem author empty$ { format.editors "author and editor" output.check % editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ % format.date "year" output.check % add.blank % new.block format.btitle "title" output.check crossref missing$ { format.bvolume output % new.block % new.sentence format.number.series output % new.sentence publisher "publisher" output.check address output } { % new.block % new.sentence format.book.crossref output.nonnull } if$ format.edition output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url FUNCTION {booklet} { output.bibitem format.authors output % author format.key output % format.date "year" output.check % format.date output % add.blank % new.block format.title "title" output.check % before.all 'output.state := % new.block % new.sentence howpublished output address output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url FUNCTION {inbook} { output.bibitem author empty$ { format.editors "author and editor" output.check % editor format.key output } { format.authors output.nonnull crossref missing$ { "author and editor" editor either.or.check } 'skip$ if$ } if$ % format.date "year" output.check % add.blank % new.block format.btitle "title" output.check crossref missing$ { format.bvolume output format.chapter.pages "chapter and pages" output.check % new.block % new.sentence format.number.series output % new.sentence publisher "publisher" output.check address output } { format.chapter.pages "chapter and pages" output.check % new.block % new.sentence format.book.crossref output.nonnull } if$ format.edition output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url FUNCTION {incollection} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block %<*!jtit-x> format.title "title" output.check % before.all 'output.state := % new.block % new.sentence % crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.chapter.pages output % new.sentence publisher "publisher" output.check address output format.edition output % format.date "year" output.check } { format.incoll.inproc.crossref output.nonnull format.chapter.pages output } if$ % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url FUNCTION {inproceedings} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block %<*!jtit-x> format.title "title" output.check % before.all 'output.state := % new.block % new.sentence % crossref missing$ { format.in.ed.booktitle "booktitle" output.check format.bvolume output format.number.series output format.pages output %<*!ay> address empty$ { organization publisher new.sentence.checkb organization output publisher output format.date "year" output.check } { address output.nonnull % format.date "year" output.check % new.sentence organization output publisher output } if$ % %<*ay> address output % new.sentence organization output publisher output % format.date "year" output.check % } { format.incoll.inproc.crossref output.nonnull format.pages output } if$ % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url FUNCTION {conference} { inproceedings } %<*ay> FUNCTION {manual} { output.bibitem format.authors output author format.key output % format.date "year" output.check % add.blank % new.block format.btitle "title" output.check % new.sentence % organization address new.block.checkb organization output address output format.edition output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % %<*!ay> FUNCTION {manual} { output.bibitem author empty$ { organization empty$ 'skip$ { organization output.nonnull address output } if$ } { format.authors output.nonnull } if$ % format.date "year" output.check % format.date output % add.blank % new.block format.btitle "title" output.check % new.sentence author empty$ { organization empty$ { % address new.block.checka address output } 'skip$ if$ } { % organization address new.block.checkb organization output address output } if$ format.edition output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url % % \end{macrocode} % \begin{macro}{`masterthesis'} % \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like % articles instead of books.} % To format a master's thesis. % \begin{macrocode} FUNCTION {mastersthesis} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block % format.btitle "title" output.check % format.title "title" output.check % before.all 'output.state := % new.block % new.sentence bbl.mthesis format.thesis.type output.nonnull school "school" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % \end{macrocode} % \end{macro} % \begin{macrocode} FUNCTION {misc} { output.bibitem format.authors output % author format.key output % format.date "year" output.check % format.date output %<*ay> % add.blank % new.block format.title output % before.all 'output.state := % new.block % new.sentence % %<*!ay> % title howpublished new.block.checkb format.title output % before.all 'output.state := % new.sentence % howpublished new.block.checka % howpublished output % format.date "year" output.check % format.date output % new.block note output %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url % \end{macrocode} % \begin{macro}{`phdthesis'} % \changes{2.0}{1994 Feb 7}{Add \texttt{thtit-a} to format thesis titles like % articles instead of books.} % To format a doctoral thesis. % \begin{macrocode} FUNCTION {phdthesis} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block % format.btitle "title" output.check % format.title "title" output.check % before.all 'output.state := % new.block % new.sentence bbl.phdthesis format.thesis.type output.nonnull school "school" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % \end{macrocode} % \end{macro} % \begin{macrocode} %<*ay> FUNCTION {proceedings} { output.bibitem format.editors output editor format.key output % format.date "year" output.check % add.blank % new.block format.btitle "title" output.check format.bvolume output format.number.series output address output % new.sentence organization output publisher output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % %<*!ay> FUNCTION {proceedings} { output.bibitem editor empty$ { organization output } { format.editors output.nonnull } if$ % format.date "year" output.check % add.blank % new.block format.btitle "title" output.check format.bvolume output format.number.series output address empty$ { editor empty$ { publisher new.sentence.checka } { organization publisher new.sentence.checkb organization output } if$ publisher output % format.date "year" output.check } { address output.nonnull % format.date "year" output.check % new.sentence editor empty$ 'skip$ { organization output } if$ publisher output } if$ % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url % FUNCTION {techreport} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % add.blank % new.block format.title "title" output.check % before.all 'output.state := % new.block % new.sentence format.tr.number output.nonnull institution "institution" output.check address output % format.date "year" output.check % new.block note output %<*!dt-beg&dt-end> % new.block format.date "year" output.check % fin.entry % write.url FUNCTION {unpublished} { output.bibitem format.authors "author" output.check % author format.key output % format.date "year" output.check % format.date output % add.blank % new.block format.title "title" output.check % before.all 'output.state := % new.block % new.sentence note "note" output.check %<*ay&!dt-beg&dt-end> % new.block format.date "year" output.check % %<*!ay&!dt-beg&dt-end> % new.block format.date output % fin.entry % write.url FUNCTION {default.type} { misc } % \end{macrocode} % \begin{macro}{`jan'} % \changes{2.0}{1994 Jan 31}{Make the translations of the months % dependent on the selected language.} % Abbreviations for the months are provided for use within the database % \texttt{.bib} file. These are now made language dependent. %^^A NEWLANGUAGE: take everything between %<*english> and % %^^A copy it, change english to newlang, replace names of months % \begin{macrocode} %<*english> MACRO {jan} {"January"} MACRO {feb} {"February"} MACRO {mar} {"March"} MACRO {apr} {"April"} MACRO {may} {"May"} MACRO {jun} {"June"} MACRO {jul} {"July"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"October"} MACRO {nov} {"November"} MACRO {dec} {"December"} % %<*babel> MACRO {jan} {"\bbljan{}"} MACRO {feb} {"\bblfeb{}"} MACRO {mar} {"\bblmar{}"} MACRO {apr} {"\bblapr{}"} MACRO {may} {"\bblmay{}"} MACRO {jun} {"\bbljun{}"} MACRO {jul} {"\bbljul{}"} MACRO {aug} {"\bblaug{}"} MACRO {sep} {"\bblsep{}"} MACRO {oct} {"\bbloct{}"} MACRO {nov} {"\bblnov{}"} MACRO {dec} {"\bbldec{}"} % %<*german> MACRO {jan} {"Januar"} MACRO {feb} {"Februar"} MACRO {mar} {"M\qq{a}rz"} MACRO {apr} {"April"} MACRO {may} {"Mai"} MACRO {jun} {"Juni"} MACRO {jul} {"Juli"} MACRO {aug} {"August"} MACRO {sep} {"September"} MACRO {oct} {"Oktober"} MACRO {nov} {"November"} MACRO {dec} {"Dezember"} % %<*french> MACRO {jan} {"janvier"} MACRO {feb} {"f\'evrier"} MACRO {mar} {"mars"} MACRO {apr} {"avril"} MACRO {may} {"mai"} MACRO {jun} {"juin"} MACRO {jul} {"juillet"} MACRO {aug} {"ao\^ut"} MACRO {sep} {"septembre"} MACRO {oct} {"octobre"} MACRO {nov} {"novembre"} MACRO {dec} {"d\'ecembre"} % %<*espo> MACRO {jan} {"januaro"} MACRO {feb} {"februaro"} MACRO {mar} {"marto"} MACRO {apr} {"aprilo"} MACRO {may} {"majo"} MACRO {jun} {"junio"} MACRO {jul} {"julio"} MACRO {aug} {"a\u{u}gusto"} MACRO {sep} {"septembro"} MACRO {oct} {"oktobro"} MACRO {nov} {"novembro"} MACRO {dec} {"decembro"} % % \end{macrocode} % \end{macro} % \begin{macrocode} MACRO {acmcs} {"ACM Computing Surveys"} MACRO {acta} {"Acta Informatica"} MACRO {cacm} {"Communications of the ACM"} MACRO {ibmjrd} {"IBM Journal of Research and Development"} MACRO {ibmsj} {"IBM Systems Journal"} MACRO {ieeese} {"IEEE Transactions on Software Engineering"} MACRO {ieeetc} {"IEEE Transactions on Computers"} MACRO {ieeetcad} {"IEEE Transactions on Computer-Aided Design of Integrated Circuits"} MACRO {ipl} {"Information Processing Letters"} MACRO {jacm} {"Journal of the ACM"} MACRO {jcss} {"Journal of Computer and System Sciences"} MACRO {scp} {"Science of Computer Programming"} MACRO {sicomp} {"SIAM Journal on Computing"} MACRO {tocs} {"ACM Transactions on Computer Systems"} MACRO {tods} {"ACM Transactions on Database Systems"} MACRO {tog} {"ACM Transactions on Graphics"} MACRO {toms} {"ACM Transactions on Mathematical Software"} MACRO {toois} {"ACM Transactions on Office Information Systems"} MACRO {toplas} {"ACM Transactions on Programming Languages and Systems"} MACRO {tcs} {"Theoretical Computer Science"} %<*ay|!seq-no> FUNCTION {sortify} { purify$ "l" change.case$ INTEGERS { len } FUNCTION {chop.word} { 's := 'len := s #1 len substring$ = { s len #1 + global.max$ substring$ } 's if$ %<*ay> FUNCTION {format.lab.names} { 's := s #1 "{vv~}{ll}" format.name$ s num.names$ duplicate$ #2 > % { pop$ " et~al." * } % { pop$ " " * "et~al." emphasize * } { #2 < 'skip$ { s #2 "{ff }{vv }{ll}{ jj}" format.name$ "others" = % { " et~al." * } % { " " * "et~al." emphasize * } %<*!harnm> % { bbl.and space.word * s #2 "{vv~}{ll}" format.name$ * } % { " \& " * s #2 "{vv~}{ll}" format.name$ * } % % { " \harvardand\ " * s #2 "{vv~}{ll}" format.name$ * } if$ } if$ } if$ FUNCTION {author.key.label} { author empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { author format.lab.names } if$ FUNCTION {author.editor.key.label} { author empty$ { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ } { author format.lab.names } if$ FUNCTION {editor.key.label} { editor empty$ { key empty$ { cite$ #1 #3 substring$ } 'key if$ } { editor format.lab.names } if$ % \end{macrocode} % \begin{macro}{`calc.label'} % \changes{2.3a}{1994 Oct 11}{Add option \texttt{note-yr}} % \begin{macrocode} FUNCTION {calc.label} { type$ "book" = type$ "inbook" = 'author.editor.key.label { type$ "proceedings" = 'editor.key.label 'author.key.label if$ } if$ % emphasize % "(" % ", " year duplicate$ empty$ { pop$ "????" } % { purify$ #-1 #4 substring$ } % 'skip$ if$ 'label := % \end{macrocode} % \end{macro} % \begin{macrocode} %<*har|cay|ast|cn> FUNCTION {calc.short.label} { type$ "book" = type$ "inbook" = 'author.editor.key.label { type$ "proceedings" = 'editor.key.label 'author.key.label if$ } if$ % emphasize 'label := % % FUNCTION {sort.format.names} { 's := #1 'nameptr := s num.names$ 'numnames := numnames 'namesleft := { namesleft #0 > } { nameptr #1 > { " " * } 'skip$ if$ s nameptr % "{vv{ } }{ll{ }}{ ff{ }}{ jj{ }}" % "{vv{ } }{ll{ }}{ f{ }}{ jj{ }}" format.name$ 't := nameptr numnames = t "others" = and { "et al" * } %<*seq-lab> { numnames #2 > nameptr #2 = and { "zzzzzz" * #1 'namesleft := } { t sortify * } if$ } % % { t sortify * } if$ nameptr #1 + 'nameptr := namesleft #1 - 'namesleft := } while$ FUNCTION {sort.format.title} { 't := "A " #2 "An " #3 "The " #4 t chop.word chop.word chop.word sortify #1 global.max$ substring$ FUNCTION {author.sort} { author empty$ { key empty$ { "to sort, need author or key in " cite$ * warning$ "" } { key sortify } if$ } { author sort.format.names } if$ FUNCTION {author.editor.sort} { author empty$ { editor empty$ { key empty$ { "to sort, need author, editor, or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ } { author sort.format.names } if$ %<*ay> FUNCTION {editor.sort} { editor empty$ { key empty$ { "to sort, need editor or key in " cite$ * warning$ "" } { key sortify } if$ } { editor sort.format.names } if$ FUNCTION {presort} { calc.label label sortify " " type$ "book" = type$ "inbook" = 'author.editor.sort { type$ "proceedings" = 'editor.sort 'author.sort if$ } if$ #1 entry.max$ substring$ 'sort.label := sort.label " " title field.or.null sort.format.title #1 entry.max$ substring$ 'sort.key$ := % % %<*!ay&!seq-no> FUNCTION {author.organization.sort} { author empty$ { organization empty$ { key empty$ { "to sort, need author, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { author sort.format.names } if$ FUNCTION {editor.organization.sort} { editor empty$ { organization empty$ { key empty$ { "to sort, need editor, organization, or key in " cite$ * warning$ "" } { key sortify } if$ } { "The " #4 organization chop.word sortify } if$ } { editor sort.format.names } if$ FUNCTION {presort} { type$ "book" = type$ "inbook" = 'author.editor.sort { type$ "proceedings" = 'editor.organization.sort { type$ "manual" = 'author.organization.sort 'author.sort if$ } if$ } if$ " " year field.or.null sortify " " title field.or.null sort.format.title #1 entry.max$ substring$ 'sort.key$ := % %<*(ay)|!seq-no> ITERATE {presort} SORT % %<*ay> STRINGS { last.label next.extra } INTEGERS { last.extra.num } FUNCTION {initialize.extra.label.stuff} { #0 int.to.chr$ 'last.label := "" 'next.extra := #0 'last.extra.num := FUNCTION {forward.pass} { last.label label = { last.extra.num #1 + 'last.extra.num := last.extra.num int.to.chr$ 'extra.label := } { "a" chr.to.int$ 'last.extra.num := "" 'extra.label := label 'last.label := } if$ FUNCTION {reverse.pass} { next.extra "b" = { "a" 'extra.label := } 'skip$ if$ extra.label 'next.extra := % extra.label emphasize 'extra.label := % label extra.label * 'label := EXECUTE {initialize.extra.label.stuff} ITERATE {forward.pass} REVERSE {reverse.pass} FUNCTION {bib.sort.order} { sort.label " " year field.or.null sortify " " title field.or.null sort.format.title #1 entry.max$ substring$ 'sort.key$ := % calc.short.label ITERATE {bib.sort.order} SORT % %<*!ay> STRINGS { longest.label } INTEGERS { number.label longest.label.width } FUNCTION {initialize.longest.label} { "" 'longest.label := #1 'number.label := #0 'longest.label.width := FUNCTION {longest.label.pass} %<*!ay&!cite> { number.label int.to.str$ 'label := number.label #1 + 'number.label := % %{ cite$ 'label := label width$ longest.label.width > { label 'longest.label := label width$ 'longest.label.width := } 'skip$ if$ EXECUTE {initialize.longest.label} ITERATE {longest.label.pass} % % \end{macrocode} %^^A NEWLANGUAGE: if newlang needs the " character in any translation %^^A (as German needs it) then use \qq instead and reproduce the %^^A line below starting with %, replaced with % % \begin{macro}{`begin.bib'} % \changes{2.0}{1994 Jan 31}{For \texttt{german}, add the definition of % {\tt\protect\bslash qq} to replace double-quote character.} % \changes{2.0}{1994 Jan 31}{For \texttt{babel}, read in file % \texttt{babelbst.tex} in \texttt{thebibliography} to define the word % commands.} % The function \texttt{begin.bib} writes the initial text to the \texttt{.bbl} % file. The most important matter here is that the \texttt{thebibliography} % environment is invoked. % \begin{macrocode} FUNCTION {begin.bib} { preamble$ empty$ 'skip$ { preamble$ write$ newline$ } if$ % "\begin{thebibliography}{}" write$ newline$ % "\begin{thebibliography}{" longest.label * "}" * write$ newline$ % "\newcommand{\enquote}[1]{`#1'}" % "\newcommand{\enquote}[1]{``#1''}" % write$ newline$ % "\let\qq=\" quote$ * write$ newline$ % "\input{babelbst.tex}" write$ newline$ EXECUTE {begin.bib} % \end{macrocode} % \end{macro} % \begin{macrocode} EXECUTE {init.state.consts} ITERATE {call.type$} FUNCTION {end.bib} { newline$ "\end{thebibliography}" write$ newline$ EXECUTE {end.bib} % % \end{macrocode} % \section{The File \texttt{babelbst.tex} for English} % The following contains the definitions for the \texttt{babel} language % selection as they apply to English. This file may be extracted with % \dtx{} and the options \texttt{bblbst,english}. % \begin{macrocode} %<*bblbst&english> % This is babelbst.tex for English. % It should serve as a model for other languages. % Alternatively, store it under a different name (e.g. englbst.tex) % and then \input it with a command in babelbst.tex. \def\bbland{and} \def\bbleditors{editors} \def\bbleds{eds.} \def\bbleditor{editor} \def\bbled{ed.} \def\bbledby{edited by} \def\bbledition{edition} \def\bbledn{edn.} \def\bblVolume{Volume} \def\bblVol{Vol.} \def\bblvolume{volume} \def\bblvol{vol.} \def\bblof{of} \def\bblNumber{Number} \def\bblNo{No.} \def\bblnumber{number} \def\bblno{no.} \def\bblin{in} \def\bblIn{In} \def\bblpages{pages} \def\bblpp{pp.} \def\bblpage{page} \def\bblp{p.} \def\bblchapter{chapter} \def\bblchap{chap.} \def\bbltechreport{Technical Report} \def\bbltechrep{Tech. Rep.} \def\bblmthesis{Master's thesis} \def\bblphdthesis{Ph.D. thesis} \def\bblfirst{First} \def\bblfirsto{1st} \def\bblsecond{Second} \def\bblsecondo{2nd} \def\bblthird{Third} \def\bblthirdo{3rd} \def\bblfourth{Fourth} \def\bblfourtho{4th} \def\bblfifth{Fifth} \def\bblfiftho{5th} \def\bblst{st} \def\bblnd{nd} \def\bblrd{rd} \def\bblth{th} \def\bbljan{January} \def\bblfeb{February} \def\bblmar{March} \def\bblapr{April} \def\bblmay{May} \def\bbljun{June} \def\bbljul{July} \def\bblaug{August} \def\bblsep{September} \def\bbloct{October} \def\bblnov{November} \def\bbldec{December} % % \end{macrocode} % \section{The File \texttt{babelbst.tex} for German} % The following contains the definitions for the \texttt{babel} language % selection as they apply to German. This file may be extracted with % \dtx{} and the options \texttt{bblbst,german}. % \begin{macrocode} %<*bblbst&german> % This is babelbst.tex for German. % It should serve as a model for other languages. % Alternatively, store it under a different name (e.g. germbst.tex) % and then \input it with a command in babelbst.tex. \def\bbland{und} \def\bbleditors{Redakteure} \def\bbleds{Red.} \def\bbleditor{Redakteur} \def\bbled{Red.} \def\bbledby{herausgegeben von} \def\bbledition{Auflage} \def\bbledn{Aufl.} \def\bblVolume{Band} \def\bblVol{Bd.} \def\bblvolume{Band} \def\bblvol{Bd.} \def\bblof{von} \def\bblNumber{Nummer} \def\bblNo{No.} \def\bblnumber{Nummer} \def\bblno{No.} \def\bblin{in} \def\bblIn{In} \def\bblpages{Seiten} \def\bblpp{S.} \def\bblpage{Seite} \def\bblp{S.} \def\bblchapter{Kapitel} \def\bblchap{Kap.} \def\bbltechreport{Technischer Bericht} \def\bbltechrep{Tech. Ber.} \def\bblmthesis{Diplomarbeit} \def\bblphdthesis{Doktorarbeit} \def\bblfirst{Erste} \def\bblfirsto{1.} \def\bblsecond{Zweite} \def\bblsecondo{2.} \def\bblthird{Dritte} \def\bblthirdo{3.} \def\bblfourth{Vierte} \def\bblfourtho{4.} \def\bblfifth{F\"unfte} \def\bblfiftho{5.} \def\bblst{.} \def\bblnd{.} \def\bblrd{.} \def\bblth{.} \def\bbljan{Januar} \def\bblfeb{Februar} \def\bblmar{M\"arz} \def\bblapr{April} \def\bblmay{Mai} \def\bbljun{Juni} \def\bbljul{Juli} \def\bblaug{August} \def\bblsep{September} \def\bbloct{Oktober} \def\bblnov{November} \def\bbldec{Dezember} % % \end{macrocode} % \section{The File \texttt{babelbst.tex} for French} % The following contains the definitions for the \texttt{babel} language % selection as they apply to French. This file may be extracted with % \dtx{} and the option \texttt{bblbst,french}. % \begin{macrocode} %<*bblbst&french> % This is babelbst.tex for French. % It should serve as a model for other languages. % Alternatively, store it under a different name (e.g. frnchbst.tex) % and then \input it with a command in babelbst.tex. \def\bbland{et} \def\bbleditors{r\'edacteurs} \def\bbleds{r\'eds.} \def\bbleditor{r\'edacteur} \def\bbled{r\'ed.} \def\bbledby{edit\'e par} \def\bbledition{\'edition} \def\bbledn{\'edn.} \def\bblVolume{Tome} \def\bblVol{Tm.} \def\bblvolume{tome} \def\bblvol{tm.} \def\bblof{de} \def\bblNumber{Num\'ero} \def\bblNo{No.} \def\bblnumber{num\'ero} \def\bblno{no.} \def\bblin{dans} \def\bblIn{Dans} \def\bblpages{pages} \def\bblpage{pp.} \def\bblpage{page} \def\bblp{p.} \def\bblchapter{chapitre} \def\bblchap{chap.} \def\bbltechrep{Rapport technique} \def\bbltechrep{Rap. tech.} \def\bblmthesis{Th\`ese de ma\^itre} \def\bblphdthesis{Th\`ese de doctorat} \def\bblfirst{Premi\`ere} \def\bblfirsto{1$^{\mbox{\scriptsize re}}$} \def\bblsecond{Deuxi\`eme} \def\bblsecondo{2\bblth} \def\bblthird{Troisi\`eme} \def\bblthirdo{3\bblth} \def\bblfourth{Quatri\`eme} \def\bblfourtho{4\bblth} \def\bblfifth{Cinqui\`eme} \def\bblfiftho{5\bblth} \def\bblst{\bblth} \def\bblnd{\bblth} \def\bblrd{\bblth} \def\bblth{$^{\mbox{\scriptsize e}}$} \def\bbljan{janvier} \def\bblfeb{f\'evrier} \def\bblmar{mars} \def\bblapr{avril} \def\bblmay{mai} \def\bbljun{juin} \def\bbljul{juillet} \def\bblaug{ao\^ut} \def\bblsep{septembre} \def\bbloct{octobre} \def\bblnov{novembre} \def\bbldec{d\'ecembre} % % \end{macrocode} % \Finale